codeforces #121 A

链接:http://codeforces.com/contest/192/problem/A

这道题我是暴力加二分过的,第一次用二分不怎么熟练导致,被HACK了,比赛完了调整了下才AC

悲剧啊,二分果然是神器啊,得用好,本人二分写的不好,有哪位大神有更好的代码真心求指教

代码:


    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    long long k[500000];
    int main()
    {
        long long a,i,j,len,c,s,b;
        for(len=0,i=1;i<=50000;i++)
            k[len++]=i*(i+1)/2;
        while(scanf("%I64d",&a)!=EOF)
        {
            int ok=0;
            for(i=0;a-k[i]>0;i++)
            {
            b=a-k[i];
            for(j=0,s=50000;j<s;)
            {
                if(k[(j+s)/2]>=b)
                s=(j+s)/2;
                else if(k[(j+s)/2]<b)
                j=(j+s)/2+1;
            }
                if(k[s]==b)
                {
                    ok=1;
                    break;
                }
            }
            if(ok)
            printf("YES\n");
            else
            printf("NO\n");
        }

    }





你可能感兴趣的:(codeforces #121 A)