hdu 1270 小希的数表
来源:互联网 发布:excel数据分析报告范文 编辑:程序博客网 时间:2024/05/16 13:41
/*枚举答案的第一个数。可知 枚举的第一个数若是正确的。那么用题目所给的输入数组 一个一个的减去第一个数得到一个数bi。用bi与前面的b1到bi-1分别相加。如果都是hash记录的数 则bi就是要求的一个数。 否则就不是。这样一直下去就可以求出结果。。最坑的就是题目中输入时n*(n-1)/2个和 这些和中有可能是重复的所以hash 要 ++ -- 不能是 0 1;*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,n2,a[4951],hash[10000],b[4951],i,j,k,z;int main(){ //freopen("test.txt","r",stdin); while(scanf("%d",&n)&&n) { n2=n*(n-1)/2; for(i=1;i<=n2;i++) { scanf("%d",&a[i]); } for(i=1;i<(a[1]+1)/2;i++)//枚举第一个数 { memset(hash,0,sizeof(hash)); for(j=1;j<=n2;j++) hash[a[j]]++; k=0; for(j=1;j<=n2;j++) { if(hash[a[j]]<=0) continue; b[++k]=a[j]-i; for(z=1;z<k;z++) { if(hash[b[z]+b[k]]<=0) { k--; goto B; } } for(z=1;z<k;z++) hash[b[z]+b[k]]--; B:; } if(k==n-1) { printf("%d",i); for(j=1;j<=k;j++) printf(" %d",b[j]); printf("\n"); break; } } }}