UVa 1614 - Hell on the Markets(贪心)
来源:互联网 发布:mac放电影有杂音 编辑:程序博客网 时间:2024/05/21 10:42
贪心部分的理论依据:前i个数可以凑出1~sum[i]的所有整数。
证明:
第二类数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时。sum[k+1]=sum[k]+a[k+1]。只需证明能凑出sum[k]+1~sum[k+1]间的整数即可。设1≤p≤a[k+1],sum[k]+p=sum[k]+a[k+1]-(a[k+1]-p)。因为1≤a[i]≤i,易得sum[k]≥k,a[k+1]-p≤k。所以一定可以凑出a[k+1]-p。所以只需从之前凑出sum[k]里面剪掉凑出a[k+1]-p的数就可以凑出sum[k]+p。所以从1~sum[k+1]都可以凑出。
输入n个数,第i个数ai满足1≤ai≤i。对每个数添加符号,使和值为0。
排序后从最大的数开始贪心就好。这次用了一些c++不常用的特性写的,一开始缺了个头文件CE了。
#include<iostream>#include<algorithm>#include<iterator>using namespace std;const int maxn=100010;struct q{ int num,id; friend ostream& operator << (ostream &out,const q& x){ cout<<x.num; return out; }};q a[maxn];int main(){ int n; while(cin>>n){ long long sum=0; for(int i=0;i<n;++i){ a[i].id=i; cin>>a[i].num; sum+=a[i].num; } if(sum&1) {cout<<"No\n";continue;} sum>>=1; sort(a,a+n,[](q& a,q& b){return a.num>b.num;}); for(int i=0;i<n;++i){ if(a[i].num<=sum){ sum-=a[i].num; a[i].num=1; } else a[i].num=-1; } sort(a,a+n,[](q& a,q& b){return a.id<b.id;}); cout<<"Yes\n"; copy(a,a+n,ostream_iterator<q>(cout," ")); cout<<endl; } return 0;}
0 0
- UVa 1614 - Hell on the Markets(贪心)
- UVa 1614:Hell on the Markets(贪心)
- 1614 - Hell on the Markets(贪心)
- UVA - 1614 Hell on the Markets 贪心+推理
- UVA 1614Hell on the Markets 结论+贪心 (2008 NE)
- UVA 1614 Hell on the Markets 【贪心+结论题】
- 习题8-10 UVA - 1614 Hell on the Markets 奇怪的股市(贪心)
- UVa 1614 Hell on the Markets
- Uva - 1614 - Hell on the Markets
- uva 1614Hell on the Markets
- UVA 1614(p254)----Hell on the Markets
- uva 1614 Hell on the Markets(数学相关)
- Hell on the Markets UVA
- uva 1614——UVA 1614 - Hell on the Markets
- UVa #1614 Hell on the Markets (习题8-10)
- UVA1614 - Hell on the Markets
- UVA 1614 Hell On The Market(贪心&&结论)
- 奇怪的股市(Hell on the Markets,ACM/ICPC NEERC 2008, UVa1614)
- SDUT 3145 Integer division 1
- C++学习起步
- pat1021 Deepest Root
- 【HDU 1512】Monkey King
- C语言操作Excel表格
- UVa 1614 - Hell on the Markets(贪心)
- iOS数据持久化方法
- JAVASE--GUI图形用户界面、网络编程
- Android 5.0中AudioPatch概念简单探索
- MacBook Pro光驱常年不用,光驱不吸盘,光盘塞不进去了。咋办?
- 微信红包游戏,代码模拟
- 跨平台移动开发实战(一)------总体架构和技术路线
- 自定义动态添加字段内容的库类
- c++11多线程与POSIX多线程性能比较