hdu 1270 小希的数表
来源:互联网 发布:linux中sed命令详解 编辑:程序博客网 时间:2024/06/05 15:58
题目
思路:
设所求的n个数按从小到大排列为a1,a2....an。
a1+a2一定是n*(n-1)/2个数的序列中最小的,a1+a3一定是次小的,通过枚举a2+a3的值解出符合条件的a1,a2,a3,
把他们两两相加的结果从n*(n-1)/2个数中排除。
然后n*(n-1)/2个数中剩下的第一个没有被排除的数一定是a1+a4的值,这样可以求的a4,再从n*(n-1)/2个数中除去a1+a4,a2+a4,a3+a4。
然后n*(n-1)/2个数中剩下的第一个没有被排除的数一定是a1+a5的值,这样可以求的a5……
如此重复,直到求的an的值,并除去a1+an,a2+an,....an-1+an,此时如果n*(n-1)/2个数已经全部除去,那么就得到了答案,否则,说明枚举的a2+a3的值仍不合要求,继续枚举下一个a2+a3的值。
#include<stdio.h>#include<string.h>int n,b[4951],a[4951],has[10000],n2; int i,flag,k,j,z;int main(){ 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(has,0,sizeof(has)); for( j=1;j<=n2;j++) has[a[j]]++; k=0; for(j=1;j<=n2;j++) { flag=0; if(has[a[j]]<=0) continue; b[++k]=a[j]-i; for(z=1;z<k;z++) { if(has[b[z]+b[k]]<=0) { k--; flag=1; break; } } if(!flag) { for(z=1;z<k;z++) has[b[z]+b[k]]--; } } if(k==n-1) { printf("%d",i); for(j=1;j<=k;j++) printf(" %d",b[j]); printf("\n"); break; } } } return 0;}
写这道题用了我大半天的时间,其中主要的心路历程便是:开始,各种看博客把别人的代码弄懂,然后就是各种查错。因为我提交的代码老是有问题,不是说我答案错误,就是运行错误。。。
搞了半天终于AC了也算没有白忙。
阅读全文
0 0
- hdu 1270 小希的数表
- HDU 1270 小希的数表
- HDU - 1270 小希的数表
- hdu 1270 小希的数表
- 1270 小希的数表
- 小希的数表
- 小希的数表
- 小希的数表
- hdu1270.小希的数表
- 1036: 小希的数表
- 问题 : 小希的数表
- 小俞同学的数表
- hdoj 小希的数表 1270 (数列模拟)好题
- 计数表的技巧
- Cantor的数表
- cantor的数表
- 白皮书&&cantor的数表
- Cantor的数表
- c语言 母串和子串的匹配问题
- 标签中文本某些字符替换(字符转换)
- SSM中Spring自带的任务定时器中Cron规则的配置
- Eclipse 新建Maven project select an Archetype这一步卡死
- redis cluster && Redis 作 mysql 的缓存服务器
- hdu 1270 小希的数表
- 10G数据量,只有2G内存,怎样找到中位数?
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Android adb 命令无线调试andorid真机
- SharedPreference源码解析
- C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
- 带你实现漂亮的滑动卷尺
- [ArcGIS] 空间分析(六) 追踪分析(台风路径)
- 数据结构 第10讲 好玩贪吃蛇——数字矩阵