HDU6168Numbers
来源:互联网 发布:仿淘宝网站源码 编辑:程序博客网 时间:2024/05/16 08:49
/*map+模拟有n个数a[i],对于每对(i,j),1<=i<=j<=n,计算(a[i]+a[j])得到新的数列b[i],有m个数,m=n*(n+1)/2现已知b[i],求a[i]*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;typedef long long LL;const int maxm=125250+5;map<LL,int>mp;int n,m;LL a[maxm],b[maxm];int main(){ while(~scanf("%d",&m)) { for(int i=0;i<m;i++) { scanf("%I64d",&b[i]); mp[b[i]]++; } sort(b,b+m);//从小到大选择 n=0; a[0]=b[0];//放入第一个数 mp[b[0]]--;//从b中删除 n++; for(int i=1;i<m;i++) { if(mp[b[i]]>0)//当前这个数是否合法 { a[n++]=b[i]; mp[b[i]]--;//从b中删除 //枚举a中新加入的数与之前的数的和 for(int j=n-2;j>=0;j--) { mp[a[n-1] + a[j]]--;//删除 } } } printf("%d\n",n); for(int i=0;i<n;i++) { printf("%I64d%c",a[i],i==n-1?'\n':' '); } } return 0;}
/*multiset+模拟有n个数a[i],对于每对(i,j),1<=i<=j<=n,计算(a[i]+a[j])得到新的数列b[i],有m个数,m=n*(n+1)/2现已知b[i],求a[i]*/#include <cstdio>#include <iostream>#include <set>using namespace std;typedef long long LL;const int maxn=125250+5;int n,m;int a[maxn];multiset<LL>b;multiset<LL>::iterator it;int main(){ while(~scanf("%d",&m)) { b.clear(); LL x; for(int i=0;i<m;i++) { scanf("%I64d",&x); b.insert(x); } n=0; while(!b.empty()) { it=b.begin();//每次从最小数选 a[n++]=*it; b.erase(it);//选出后删除 //枚举a中新加入的数与之前的数的和 for(int i=n-2;i>=0;i--) { it=b.find(a[n-1]+a[i]);//在b中找和 b.erase(it); } } printf("%d\n",n); for(int i=0;i<n;i++) { printf("%d%c",a[i],i==n-1?'\n':' '); } } return 0;}
阅读全文
0 0
- HDU6168Numbers
- hdu6168Numbers(第九场模拟)
- 拷贝构造函数和TIME_WAIT状态的意义
- linux mysql的慢查询日志
- c++ 通过socket(网络套接字)传输图片(服务端)
- BZOJ 1001 网络流最小割 解题报告
- DataFrame 数据合并,连接(merge,join,concat)
- HDU6168Numbers
- Cookie技术
- NYOJ 613 免费馅饼
- 使用scrapy爬取豆瓣上面《战狼2》影评
- cocos creator学习(六)节点多造成真机上的卡顿
- StringUtils用法
- Google/LintCode:M-Palindrome Partitioning II
- Hdu 6166 Senior Pan 随机+SPFA 解题报告
- 《剑指offer2》问题14 剪绳子 Java实现