CodeForces 483B

来源:互联网 发布:cnas 软件测试 编辑:程序博客网 时间:2024/05/19 07:43

题目大意:
你有两个朋友 你将对每一个朋友展示几个正整数
向第一个朋友展示 cnt1 个 向第二个朋友展示 cnt2 个
每个人的展示数唯一不重复
然而,第一个朋友不喜欢能被素数x整除的数字
第二个朋友不喜欢能被素数y整除的数字
你自然不会给你的朋友展示不喜欢的东西
你的任务是找到这样的最小数量v,你可以使用一组1,2,…,v中的数字来形成礼物
当然,您可以选择不提供一些数字。
如果大于1的正整数除了1和它本身之外没有正除数,则称为素数。

输入:
唯一的行包含四个正整数cnt1,cnt2,x,y(1≤cnt1,cnt2 <10^9; cnt1 +cnt2≤10^9;2≤x ,y≤3*10^4) - 语句中描述的数字。
数字x,y保证是素数。

输出:
唯一正整数v

想法:
本来就想做两个1000*1000*1000的数组的。。但是想了想这里可能用指针比较合适(或许这个题目也很适合用栈结构),主要考虑的是动态生成数据链。


这里写图片描述

#include<iostream>using namespace std;void San(long long cnt1, long long cnt2, int x, int y);struct p{    long long num;    struct p *next;};int main(){    long long cnt1, cnt2;    int x, y;    while (true)    {        cin >> cnt1 >> cnt2 >> x >> y;        San(cnt1, cnt2, x, y);    }    return 0;}void San(long long cnt1, long long cnt2, int x, int y){    p *p1;    p *p2;    p1 = new p;    p1->num = 0;    p1->next = NULL;    p2 = new p;    p2->num = 0;    p2->next = NULL;    if (y<x)    {        int z = x;        x = y;        y = z;    }    long long i = 1;    int xflag = 0;    int yflag = 0;    p *p11 = p1;    p *p22 = p2;    while (xflag != cnt1||yflag != cnt2)    {        if (i%x != 0 && xflag<cnt1)        {            p11->num = i;            p11->next = new p;            p11 = p11->next;            p11->num = 0;            p11->next = NULL;            xflag++;        }        else if (i%y == 0 && yflag<cnt2)        {            if (i%x == 0 || (p1->num == 0))                ;            else if (p1->num%y == 0)            {                p *temp = p1;                p1 = p1->next;                delete temp;            }            else            {                p22->num = p1->num;                p22->next = new p;                p22->num = 0;                p22 = p22->next;                p1->num = i;                yflag++;            }        }        else if (i%y != 0 && yflag<cnt2)        {            p22->num = i;            p22->next = new p;            p22 = p22->next;            p22->num = 0;            p22->next = NULL;            yflag++;        }        i++;    }    cout << i-1 << endl;    while (p1->next != NULL)    {        p *temp = p1;        p1 = p1->next;        delete temp;    }    while (p2->next != NULL)    {        p *temp = p2;        p2 = p2->next;        delete temp;    }}
原创粉丝点击