HDU 5090 Game with Pearls(贪心)

来源:互联网 发布:产业结构优化 编辑:程序博客网 时间:2024/06/04 19:44

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5090

题目大意:有两个人,两个数 N 和 K ,有 N 个罐子,每个罐子里先开始都有一些珍珠,现在可以往每个罐子里加 0 或K正整数倍的珍珠,最后把这些罐子按照里面珍珠的数量从小往大排,问你能不能最后得到第 i 个罐子里恰好存在 i 个珍珠,如果可以,就输出 “Jerry”,否则就输出“Tom”。

解题思路:贪心的思想,如果一个数能加上 K 的到达每个数字 i ,那么比他小 K 的数字肯定也能,同样的话,肯定选最大能构成的那个数字,小的那个还有更多机会去构成其他的。也就是说,要构成 i ,先看 i 有木有,再看 i - k 有木有 ... 如果有个数字没法构成,那么就是不可以。

      哎,贪心啊,都没想出来,cuo。。。

代码如下:

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int num[111];int main(){    int _;    scanf("%d",&_);    while(_--)    {        int n,k;        scanf("%d%d",&n,&k);        memset(num,0,sizeof(num));        for(int i = 0;i < n;i++)        {            int a;            scanf("%d",&a);            num[a]++;        }        int ok = 1;        for(int i = n;i >= 1;i--)        {            int tmp = i;            while(tmp > 0)            {                if(num[tmp])                {                    num[tmp]--;                    break;                }                tmp -= k;            }            if(tmp <= 0)            {                ok = 0;                break;            }        }        if(ok) puts("Jerry");        else puts("Tom");    }    return 0;}


0 0
原创粉丝点击