【uva 1614】Hell on the Markets(算法效率--贪心)
题意:有一个长度为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(算法效率--贪心)相关推荐
- 【uva 1617】Laptop(算法效率--贪心,2种理解)
题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...
- AI算法效率每16个月提速一倍,算力革命超越摩尔定律
AI算法效率每16个月提速一倍,算力革命超越摩尔定律 2020-05-06 22:10:26 作者 | 蒋宝尚 编辑 | 丛 末 摩尔定律预测芯片性能每18个月翻一倍,那 AI 算法性能多少个月翻一番 ...
- MIT新研究:过去80年,算法效率提升到底有多快?
来源:MIT,新智元 编辑:David [导读]随着摩尔定律走向终结,靠提升计算机硬件性能可能越发难以满足海量计算的需要,未来的解决之道在于提升算法的效率.MIT的这篇新论文总结了过去80年来,算法效 ...
- 第四课:算法效率的度量和存储空间需求
第四课 本课主题: 算法效率的度量和存储空间需求 教学目的: 掌握算法的渐近时间复杂度和空间复杂度的意义与作用 教学重点: 渐近时间复杂度的意义与作用及计算方法 教学难点: 渐近时间复杂度的意义 授课 ...
- 超摩尔定律!OpenAI官宣AI算法效率每16个月翻一番
OpenAI今天宣布将开始追踪机器学习模型的效率,并对AI算法演进的情况进行定量追踪,结果显示算法改进效率吊打摩尔定律. 为了启动这一进程,Open AI发表了一份分析报告,开篇即用数据展示了算法演进 ...
- uva 1614奇怪的股市(归纳法证明,贪心)
uva 1614奇怪的股市(归纳法证明,贪心) 输入一个长度为n的序列a,满足\(1\le a_i\le i\),要求确定每个数的正负号,使得所有数的总和为0.例如a={1, 2, 3, 4},则4个 ...
- 编程方法学23:搜索排序与算法效率分析
前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十三节课,这堂课是助教来讲搜索排序与算法效率分析的知识. 1线 ...
- 【数据结构】之算法效率的度量
算法效率的度量 算法效率的度量是通过时间复杂度和空间复杂度来描述的. 时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数.算法中所有语句的频度之和记为T(n) 算法的时间复杂度记为 T(n) ...
- python数据结构算法优势_Python数据结构与算法(一)----- 算法效率
一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...
最新文章
- linux @webserviceclient 访问超时_Linux系统调优
- 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信
- java class 是否相等_Java重要技术(30)类加载器之Class类型的相等比较
- megacli通过盘符定位物理盘_柴少鹏的官方网站
- zoj3195 联通树上三个点的路径长
- 【十二省联考2019】字符串问题【后缀自动机】【拓扑排序】
- 导航菜单UI设计中的作用,优秀案例临摹起来!
- 通过C++的try和catch来捕获SEH异常
- Spring IOC基础概念总结:何为控制?何为反转?控制了什么?反转了哪里?
- 数​据​库​查​看​内​存​使​用​I​N​F​O​R​M​I​X
- 计算机的次要功能,FRM考试时所用计算器的操作指南
- 虚拟机网卡和linux bridge上tap设备的关系
- springboot读取文件
- 安装molten教程
- android隐藏微信好友,如何使用微信隐藏的恢复小技巧?微信好友恢复!
- 软件测试学习心得-5
- 如何用ps设计出一张吸引人眼球的创意节日海报?
- IT从业者的职业规划
- 新一配:iPod及其配置介绍【转载】
- 云中的安全api使用云端点espv2 beta运行云功能和应用程序引擎
热门文章
- http://www.csdn.net/
- 众多Android 开源项目推荐,给力工作给力学习
- 使用 document.onreadystatechange()来判断页面加载完
- webwork2.2.4+spring配制方式总结
- Win64 驱动内核编程-5.内核里操作文件
- 【数字信号处理】相关系数 ( 相关系数概念解析 | 信号能量常数 | 共轭序列 | 序列在相同时刻的相关性 )
- 【Android 逆向】x86 CPU 架构体系 ( CPU 模型 | 内存模型 )
- 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 制作 APK 扩展包 | 上传 APK 扩展包到 Google Play | APK 扩展文件上传时机 )
- 【Flutter】Flutter 拍照示例 ( Android 应用兼容 Android X | Gradle 版本号 | Gradle 插件版本号 | Android X 支持 | SDK 版本 )
- 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )