这道题我苦思冥想了一个小时, 想用背包来揍sum/2, 然后发现数据太大, 空间存不下。

然后我最后还是去看了别人的博客, 发现竟然有个神奇的结论……

幸好我没再钻研, 感觉这个结论我肯定是想不到的……

结论是:在1 <= a[i] <= i时, 前i个数一定可以凑出1~sum[i]的所有整数

证明看这 https://blog.csdn.net/wcr1996/article/details/43957461

其他博客写有了这个结论, 就排序一下, 从大到小, 凑sum/2, 能凑就凑, 最后一定可以凑成。

但是我开始一直想不通为啥这样下去一定可以凑成, 为什么要排序??其他博客貌似没有

给出解释……

然后我自己思考了挺久, 想通了。

首先这个结论证明一定可以揍成sum/2(sum为奇数不考虑, 输出No)

然后, 从大到小排序。

假设第一个可以凑的数为a[k], a[k]显然是第一个小于等于sum/2的数

也就是说a[k]之前的数, 也就是所有大于a[k]的数, 都大于sum/2

也就是说这些数不可能来揍sum/2.

然后sum/2就减去了a[k]。那么a[k]之后的数一定可以凑sum/2-a[k];

为什么呢?这里是关键。

因为要凑sum/2-a[k]的数字肯定小于sum/2-a[k], 而这些数字一定在a[k]之后

因为a[k]是第一个小于等于sum/2的数, 那么第一个小于等于sum/2-a[k]的数字

肯定小于等于a[k], 也就肯定在a[k]后面。

所以要凑成sum/2-a[k]的数都在a[k]后面, 这些数字还没有被选到。

因为开始的结论说明肯定可以凑sum/2-a[k], 而所有需要来凑

sum/2-a[k]的数还没有遍历到。

所以, sum/2-a[k]一定可以用还没遍历到的数凑成。

以此类推, 一直做下去, 肯定可以凑完

over!!!!!!!!!!


#include<cstdio>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112345;
int a[MAXN], id[MAXN], n; bool cmp(int x, int y)
{
return a[x] > a[y];
} int main()
{
while(~scanf("%d", &n))
{
long long sum = 0;
REP(i, 0, n)
{
scanf("%d", &a[i]);
sum += a[i];
id[i] = i;
}
if(sum & 1) { puts("No"); continue; } sort(id, id + n, cmp);
sum >>= 1; REP(i, 0, n)
{
int t = id[i];
if(a[t] <= sum)
{
sum -= a[t];
a[t] = 1;
}
else a[t] = -1;
} puts("Yes");
REP(i, 0, n) printf("%d ", a[i]);
puts("");
} return 0;
}

最新文章

  1. Kafka 分布式环境搭建
  2. php 中的curl
  3. Java解析文本
  4. Copy List with Random Pointer [LeetCode]
  5. DataTable 筛选数据
  6. Completely disable mousewheel on a WinForm
  7. Linux客户端、服务器、窗口管理器的关系
  8. 【Hibernate 5】继承映射配置及多态查询
  9. [原创]PostgreSQL中十进制、二进制、十六进制之间的相互转换
  10. Struts2笔记——与ServletAPI解耦
  11. PHP之图形处理
  12. linux相关小工具的使用(一)————代码相关工具
  13. Windows系统命令行net user命令用法
  14. 使用svn与maven管理的项目导入Eclipse,但是与本地svn客户端关联不上?
  15. Altium Designer快速调整丝印
  16. python网络-Socket之udp编程(24)
  17. JQuery属性选择
  18. ubuntu compile openjdk87
  19. 记录一次mysql使用load into命令导入csv格式数据的过程
  20. HDU 6184 Counting Stars

热门文章

  1. 8、Collaborative Metric Learning
  2. ES6 Symbol类型 附带:Proxy和Set
  3. 【BZOJ5020】[LOJ2289]【THUWC2017】在美妙的数学王国中畅游 - LCT+泰勒展开
  4. Nusoap复杂对象的的webService制作
  5. CefSharp获取页面Html代码的两种方式
  6. vue登录
  7. BZOJ 1016 最小生成树计数(矩阵树定理)
  8. 【codeforces 500E】New Year Domino
  9. CURL库的宏定义列表
  10. Java5新特性之枚举