码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 1614 - Hell on the Markets 奇怪的股市(贪心,结论)

时间:2015-08-04 18:55:11      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

先证明一个结论吧,对于1≤ai≤i+1,一定可以表示出1~sum[i]中的任意一个数.

对于i=1显然成立,

假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了。

因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+1,剩下的0≤sum[k]+i-ak+1≤sum[k]一定是可以有前面的数字凑出来的。

这就证明了贪心的正确性。

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+5;
int a[maxn];
int r[maxn];
bool cmp(int x,int y) { return a[x] < a[y]; }

int main()
{
    int n;
    while(~scanf("%d",&n)){
        long long sum = 0;
        for(int i = 0; i < n; i++) scanf("%d",a+i),sum += a[i],r[i] = i;
        if(sum&1) { puts("No"); continue; }
        sort(r,r+n,cmp);
        sum >>= 1;
        for(int i = n-1; i >= 0; i--){
            int j = r[i];
            if(a[j]<=sum){
                sum -= a[j];
                a[j] = 1;
            }else {
                a[j] = -1;
            }
        }
        printf("Yes\n%d",a[0]);
        for(int i = 1; i < n; i++) printf(" %d",a[i]);
        puts("");
    }
    return 0;
}

 

UVA 1614 - Hell on the Markets 奇怪的股市(贪心,结论)

标签:

原文地址:http://www.cnblogs.com/jerryRey/p/4702658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!