hdu 5090 Game with Pearls 2014上海全国邀请赛——题目重现

来源:互联网 发布:qq飞车mac版 编辑:程序博客网 时间:2024/05/16 00:59

三门final exams结束之后继续我的水题大作战~~^^~~

这一题我第一眼还以为是博弈。。。最后一看N才100,直接枚举填数就可以了。

我之前还考虑会不会有这种case,比如已存在a,b,然后a+xK补b的位置,b+yK补c  (c=b+yK),最后发现因为直接是K的倍数,直接a+(x+y)K补c不就行了,原先存在的数不会变动。简直智硬啊。。。

所以如果有多个a,直接+K,+2K,+3K..从小到大枚举即可。

#include<iostream>#include<stdio.h>#include<cstdio>#include<stdlib.h>#include<vector>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#include<queue>#include <ctype.h>using namespace std;//hdu 5090;int N;int M;int K;int a[1000];int main(){    freopen("input.txt","r",stdin);    // freopen("data.txt","r",stdin);     //freopen("out1.txt","w",stdout);    scanf("%d",&M);    for(int i=0;i<M;i++)    {        memset(a,0,sizeof(a));        scanf("%d %d",&N,&K);        for(int i=1;i<=N;i++)        {            int t=0;            scanf("%d",&t);            a[t]++;        }        for(int i=1;i<=N;i++)        {            if(a[i]>1)            {                int cnt=1;                while(a[i]>1&&(i+cnt*K)<=N)                {                    if(a[i+cnt*K]==0)                    {                        a[i]--;                        a[i+cnt*K]++;                        //break;                    }                    cnt++;                }            }        }        bool flg=true;        for(int i=1;i<=N;i++)        {            if(a[i]==0)            {                printf("Tom\n");                flg=false;                break;            }        }        if(flg)        {            printf("Jerry\n");        }    }    return 0;}


0 0
原创粉丝点击