hdu 5373 The shortest problem (模拟)

来源:互联网 发布:淘宝助手怎么下架宝贝 编辑:程序博客网 时间:2024/04/27 17:41
//暴力模拟:用字符串数组超时,这里用数字一边补一边拆#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <cmath>#include <string>#include <vector>#include <map>#include <queue>#include <set>#include <climits>using namespace std;int main(){    int n,t;    int kase=1;    while(~scanf("%d%d",&n,&t))    {        if(n==-1&&t==-1)break;        int i;        int sum1=0,sum2=0;        int sum=0;        for(i=1;n!=0;i++)        {            int d=n%10;            sum+=d;            if(i&1)sum1+=d;            else sum2+=d;            n=n/10;        }        int flag=0; //flag:1´ú±í½ÓÊÕÆæÊý£¬2´ú±í½ÓÊÜżÊý¡£        if((i-1)%2==0)        {            flag=1;            swap(sum1,sum2);        }        for(int j=1;j<=t;j++)        {            n=sum;            int sum11=0;            int sum22=0;            for(i=1;n!=0;i++)            {                sum+=n%10;                if(i&1)sum11+=n%10;                else sum22+=n%10;                n/=10;            }            int flag2=0;  //1´ú±íλÊý˫룬0´ú±íλÊýµ¥Î»            if((i-1)%2==0)            {                swap(sum11,sum22);                flag2=1;            }            if(flag==1&&flag2==1)            {                sum1+=sum11;                sum2+=sum22;                flag=1;            }            else if(flag==1&&flag2==0)            {                sum1+=sum11;                sum2+=sum22;                flag=0;            }            else if(flag==0&&flag2==1)            {                sum1+=sum22;                sum2+=sum11;                flag=0;            }            else if(flag==0&&flag2==0)            {                sum1+=sum22;                sum2+=sum11;                flag=1;            }        }        if(abs(sum1-sum2)%11==0)printf("Case #%d: Yes\n",kase++);        else printf("Case #%d: No\n",kase++);    }    return 0;}

0 0