hdu 4982 Goffi and Squary Partition

来源:互联网 发布:数据侠客行女主 编辑:程序博客网 时间:2024/05/11 00:58

循环没有取得那个数即可,判断可以使用贪心很好判断,如果最后一个数是j(j<=k-1)则前面数至少为1....j-1,j+1,,,k-1即可,其他的类似。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int get(int p){    int k;    k=(int )sqrt(p*1.0);    for(int i=max(1,k-3);i<=k+3;i++){        if(p==i*i) return 1;    }    return 0;}int main(){    int j,n,p,k,t;    while(cin>>n>>k){        if(n<k*(k+1)/2){            printf("NO\n");            continue;        }        p=k*(k-1)/2;        t=0;        for(j=1;j<=n-p;j++){            if(j==k){                if(n-j==(k)*(k-1)/2+1) continue;                else{                    if(get(n-j)){                        t=1;                        break;                    }                }                continue;            }            if(j>=k){            if(get(n-j)){                t=1;                break;            }            }            else{                if(n-j<(j)*(j-1)/2+(k+j+1)*(k-j)/2) continue;                if(get(n-j)){                    t=1;                    break;                }            }        }        if(t) printf("YES\n");        else printf("NO\n");    }}


0 0