题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知。请输出一种正负号的情况,使得所有数的和为0。(N≤100000)

解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这题的贪心实在是太厉害了!我就单看,就盯了题解半小时以上...而代码又那么短,我就打了代码了...其实我又不太理解为什么一定要排序。)

贪心部分的理论依据:前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。又因为已知前k个数可以凑出1~sum[k],所以一定可以凑出a[k+1]-p。
所以只需从之前凑出sum[k]里面剪掉凑出a[k+1]-p的数就可以凑出sum[k]+p。所以从1~sum[k+1]都可以凑出。

实现就是输入时存一下sum,若为奇数就无解,否则再排个序,从大到小扫一遍,选凑成和为sum/2的数的符号为+,其余为-。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<iostream>
 5 using namespace std;
 6
 7 const int N=100010;
 8 struct node{int x,id;}a[N];
 9 int b[N],ans[N];
10
11 bool cmp(node x,node y) {return x.x>y.x;}
12 int main()
13 {
14     int n;
15     long long sum;//不能用int
16     while (~scanf("%d",&n))
17     {
18       sum=0;
19       for (int i=1;i<=n;i++)
20       {
21         scanf("%d",&a[i].x);
22         a[i].id=i, sum+=a[i].x;
23       }
24       if (sum%2) {printf("No\n");continue;}
25       printf("Yes\n");
26       sum/=2;
27       sort(a+1,a+1+n,cmp);
28       for (int i=1;i<=n;i++)
29       {
30         if (a[i].x<=sum) ans[a[i].id]=1,sum-=a[i].x;
31         else ans[a[i].id]=-1;
32       }
33       printf("%d",ans[1]);
34       for (int i=2;i<=n;i++)
35         printf(" %d",ans[i]);
36       printf("\n");
37     }
38     return 0;
39 }

转载于:https://www.cnblogs.com/konjak/p/6052536.html

【uva 1614】Hell on the Markets(算法效率--贪心)相关推荐

  1. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  2. AI算法效率每16个月提速一倍,算力革命超越摩尔定律

    AI算法效率每16个月提速一倍,算力革命超越摩尔定律 2020-05-06 22:10:26 作者 | 蒋宝尚 编辑 | 丛 末 摩尔定律预测芯片性能每18个月翻一倍,那 AI 算法性能多少个月翻一番 ...

  3. MIT新研究:过去80年,算法效率提升到底有多快?

    来源:MIT,新智元 编辑:David [导读]随着摩尔定律走向终结,靠提升计算机硬件性能可能越发难以满足海量计算的需要,未来的解决之道在于提升算法的效率.MIT的这篇新论文总结了过去80年来,算法效 ...

  4. 第四课:算法效率的度量和存储空间需求

    第四课 本课主题: 算法效率的度量和存储空间需求 教学目的: 掌握算法的渐近时间复杂度和空间复杂度的意义与作用 教学重点: 渐近时间复杂度的意义与作用及计算方法 教学难点: 渐近时间复杂度的意义 授课 ...

  5. 超摩尔定律!OpenAI官宣AI算法效率每16个月翻一番

    OpenAI今天宣布将开始追踪机器学习模型的效率,并对AI算法演进的情况进行定量追踪,结果显示算法改进效率吊打摩尔定律. 为了启动这一进程,Open AI发表了一份分析报告,开篇即用数据展示了算法演进 ...

  6. uva 1614奇怪的股市(归纳法证明,贪心)

    uva 1614奇怪的股市(归纳法证明,贪心) 输入一个长度为n的序列a,满足\(1\le a_i\le i\),要求确定每个数的正负号,使得所有数的总和为0.例如a={1, 2, 3, 4},则4个 ...

  7. 编程方法学23:搜索排序与算法效率分析

    前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十三节课,这堂课是助教来讲搜索排序与算法效率分析的知识. 1线 ...

  8. 【数据结构】之算法效率的度量

    算法效率的度量 算法效率的度量是通过时间复杂度和空间复杂度来描述的. 时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数.算法中所有语句的频度之和记为T(n) 算法的时间复杂度记为 T(n) ...

  9. python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

    一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...

最新文章

  1. linux @webserviceclient 访问超时_Linux系统调优
  2. 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信
  3. java class 是否相等_Java重要技术(30)类加载器之Class类型的相等比较
  4. megacli通过盘符定位物理盘_柴少鹏的官方网站
  5. zoj3195 联通树上三个点的路径长
  6. 【十二省联考2019】字符串问题【后缀自动机】【拓扑排序】
  7. 导航菜单UI设计中的作用,优秀案例临摹起来!
  8. 通过C++的try和catch来捕获SEH异常
  9. Spring IOC基础概念总结:何为控制?何为反转?控制了什么?反转了哪里?
  10. 数​据​库​查​看​内​存​使​用​I​N​F​O​R​M​I​X
  11. 计算机的次要功能,FRM考试时所用计算器的操作指南
  12. 虚拟机网卡和linux bridge上tap设备的关系
  13. springboot读取文件
  14. 安装molten教程
  15. android隐藏微信好友,如何使用微信隐藏的恢复小技巧?微信好友恢复!
  16. 软件测试学习心得-5
  17. 如何用ps设计出一张吸引人眼球的创意节日海报?
  18. IT从业者的职业规划
  19. 新一配:iPod及其配置介绍【转载】
  20. 云中的安全api使用云端点espv2 beta运行云功能和应用程序引擎

热门文章

  1. http://www.csdn.net/
  2. 众多Android 开源项目推荐,给力工作给力学习
  3. 使用 document.onreadystatechange()来判断页面加载完
  4. webwork2.2.4+spring配制方式总结
  5. Win64 驱动内核编程-5.内核里操作文件
  6. 【数字信号处理】相关系数 ( 相关系数概念解析 | 信号能量常数 | 共轭序列 | 序列在相同时刻的相关性 )
  7. 【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
  8. 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 制作 APK 扩展包 | 上传 APK 扩展包到 Google Play | APK 扩展文件上传时机 )
  9. 【Flutter】Flutter 拍照示例 ( Android 应用兼容 Android X | Gradle 版本号 | Gradle 插件版本号 | Android X 支持 | SDK 版本 )
  10. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )