2017 多校训练第九场 HDU 6168 Numbers 贪心枚举
来源:互联网 发布:淘宝店铺模板有什么用 编辑:程序博客网 时间:2024/06/07 02:14
因为a数组都是正数,那么根据定义:混合之后的数组中最小的两个数必然是在a数组的,因此先选取这两个数,然后贪心枚举。
比赛的时候,没有枚举b数组的数,因此map就自动生成了许多数,造成MLE。
现在重写一遍倒是想明白了。
AC代码:
#include <bits/stdc++.h>using namespace std;const int mod=1e9+7;const int maxn=150000;int num[maxn],a[maxn];void inint(){memset(num,0,sizeof(num));for(int i=1;i<=500;i++){int m=i*(i+1)/2;num[m]=i;}}map<int,int>mii;int main(int argc, char const *argv[]){inint();int m;while(~scanf("%d",&m)){vector<int>a(m);mii.clear();for(int i=0;i<m;i++){scanf("%d",&a[i]);mii[a[i]]++;}if(m==0){printf("0\n\n");continue;}int n=num[m];sort(a.begin(),a.end());vector<int>ans;ans.push_back(a[0]),ans.push_back(a[1]);mii[a[0]]--,mii[a[1]]--;mii[a[0]+a[1]]--;int x=a[0];int k=0;for(k=0;k<m;k++){x=a[k];if(mii[x]) break;}for(int i=2;i<n;i++){ans.push_back(x);for(int j=0;j<(int)ans.size()-1;j++){mii[x+ans[j]]--;}mii[x]--;for(;k<m;k++){x=a[k];if(mii[x]) break;}}printf("%d\n",n);for(int i=0;i<n;i++){printf("%d%c",ans[i],i==n-1?'\n':' ');}}return 0;}
阅读全文
0 0
- 2017 多校训练第九场 HDU 6168 Numbers 贪心枚举
- (2017多校训练第一场)HDU
- (2017多校训练第一场)HDU
- (2017多校训练第一场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第三场)HDU
- (2017多校训练第三场)HDU
- (2017多校训练第三场)HDU
- (2017多校训练第四场)HDU
- (2017多校训练第二场)HDU
- (2017多校训练第一场)HDU
- (2017多校训练第五场)HDU
- (2017多校训练第四场)HDU
- (2017多校训练第七场)HDU
- (2017多校训练第七场)HDU
- Qt中鼠标的双击事件和单击事件的实现方式
- Samba
- 他们说游戏人要懂点儿艺术
- IntelliJ idea创建Spring MVC的Maven项目
- 再谈AbstractQueuedSynchronizer3:基于AbstractQueuedSynchronizer的并发类实现
- 2017 多校训练第九场 HDU 6168 Numbers 贪心枚举
- javamail 发送邮件
- 《Win32多线程程序设计》之线程同步
- Java常用API----包装类
- Python猜数
- Kd-Tree算法原理简析
- postgres的导出和备份
- WHU 1464(线段树减,除,区间求和)
- IO/InputStream