hdoj5832【模拟】

主要还是一个10001的倍数的问题;

队友的思路:
01
1个数*10001,最后四位是这个数的后四位
比如
521456
10001
521456
521456
9 5215081456
从后面for过来,如果i比前面4个大,前第四位要+10,前第五位-1,
否则直接减,最后都会变成0,如果成立的话

比赛时的挫code…….

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
#include<string>
using namespace std;
const int N=10001000;
#define ll long long
#define mod 10000007
int n,m;
char s[N];
int main()
{
    int k = 1;
    while(~scanf("%s",s))
    {
        printf("Case #%d: ",k++);
        int len = strlen(s);
        if(s[0] == '0' && len == 1)
        {
            printf("YES\n");
            continue;
        }
        int flag = 0;
        for(int i = len-1; i >= 4; i--)
        {
            if(s[i] != '0')
            {
                if(s[i-4] >= s[i])
                {
                    s[i-4] = s[i-4] - (s[i]-'0');
                    s[i] = '0';
                }
                else
                {
                    s[i-4] = s[i-4]+10-(s[i]-'0');
                    s[i] = '0';
                    s[i-5]--;
                }
            }
        }
        for(int i = 0; i < len; i++)
        {
            if(s[i] != '0')
                flag = 1;
        }
        if(flag == 1)
            printf("NO\n");
        else
            printf("YES\n");

    }
    return 0;
}
posted @ 2016-08-15 00:25  see_you_later  阅读(119)  评论(0编辑  收藏  举报