zoukankan      html  css  js  c++  java
  • UVA 1614

    题意:

      输入n个数,第i个数ai满足1≤ai≤i。对每个数添加符号,使和值为0。

    分析:

      排序后从最大的元素(假设为k)开始,凑出sum/2即可。用去掉了k的集合,一定可以凑出sum/2 - a[k]。只要sum是偶数,就一定会有解。

    代码:

      

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn=1e6+5;
    int a[maxn];
    int r[maxn];
    bool cmp(int x,int y)
    {
    return a[x] < a[y];
    }
    int main()
    {
    int n;
    int i;
    while(~scanf("%d",&n))
    {
    long long sum=0;
    for(i=0;i<n;i++)
    {
    scanf("%d",a+i);
    sum+=a[i];
    r[i]=i;
    }
    if(sum&1)
    {
    cout<<"No"<<endl;
    continue;
    }
    sort(r,r+n,cmp);
    sum>>=1;
    for(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 %d",a[0]);
    for(i=1;i<n;i++)
    printf(" %d",a[i]);
    printf(" ");
    }
    return 0;
    }
  • 相关阅读:
    Java入门
    Java入门
    Java入门
    Java入门
    Java入门
    Java入门
    Java入门
    Java入门
    leyou_04_vue.js的ajax请求方式
    leyou_03_cors解决ajax的跨域请求问题
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4928530.html
Copyright © 2011-2022 走看看