hdu 1034 (preprocess optimization, property of division to avoid if, decreasing order process) 分类: hdoj 2015-06-16 13:32 39人阅读 评论(0) 收藏
IMO, version 1 better than version 2, version 2 better than version 3.
make some preprocess to make you code simple and efficient. Here divide the input by 2, so you don’t have to do dividsion on each loop.
version 1 is best
thanks to
http://www.cnblogs.com/kuangbin/archive/2012/06/03/2532690.html
#include <cstdio>
#include <algorithm>
#define MAXSIZE 10000
int candies[MAXSIZE];
int main() {
//freopen("input.txt","r",stdin);
int n, cnt_whistle, i, tmp;
while(scanf("%d",&n)!=EOF && n>0) {
for(i=0;i<n;++i) { scanf("%d",&tmp); candies[i]=tmp>>1; }
for(--n, cnt_whistle=1;;++cnt_whistle) {
tmp=candies[n];
for(i=n;i>0;--i) {
candies[i]=(candies[i-1]+candies[i]+1)>>1;
}
candies[0]=(tmp+candies[0]+1)>>1;
for(i=1;i<=n && candies[i-1]==candies[i];++i) ;
if(i-n==1) break;
}
printf("%d %d\n",cnt_whistle,candies[0]<<1);
}
return 0;
}
use division’s floor property (5/2=2) to avoid if sentences. in version 2 here
t2=candies[i];
candies[i]=(t1+t2+1)>>1;
t1=t2;
if don’t divide input by 2, the code will be
t2=candies[i]>>1;
candies[i]=t1+t2;
if(candies[i]%2) ++candies[i];
t1=t2;
how to avoid process the border conditions? version 2 better than version 3 on this aspect. version 1 accomplish this, thanks to
http://www.acmerblog.com/hdu-1034-candy-sharing-game-1285.html
version 2
#include <cstdio>
#include <algorithm>
#define MAXSIZE 10000
int candies[MAXSIZE];
int main() {
//freopen("input.txt","r",stdin);
int n, cnt_whistle, i, t1,t2;
while(scanf("%d",&n)!=EOF && n>0) {
for(i=0;i<n;++i) { scanf("%d",&t1); candies[i]=t1>>1; }
for(--n, cnt_whistle=1;;++cnt_whistle) {
t1=candies[n];
for(i=0;i<=n;++i) {
t2=candies[i];
candies[i]=(t1+candies[i]+1)>>1;
t1=t2;
}
for(i=1;i<=n && candies[i-1]==candies[i];++i) ;
if(i-n==1) break;
}
printf("%d %d\n",cnt_whistle,candies[0]<<1);
}
return 0;
}
version 3
#include <cstdio>
#include <algorithm>
#define MAXSIZE 10000
int candies[MAXSIZE];
int cand_temp[MAXSIZE];
int main() {
//freopen("input.txt","r",stdin);
int n, cnt_whistle, i, *p,*q;
while(scanf("%d",&n)!=EOF && n>0) {
for(i=0;i<n;++i) { scanf("%d",&t1); candies[i]=t1>>1; }
p=candies, q=cand_temp;
for(--n, cnt_whistle=1;;++cnt_whistle) {
for(i=1;i<=n;++i) {
q[i]=(p[i-1]+p[i]+1)>>1;
}
q[0]=(p[n]+p[0]+1)>>1;
std::swap(p,q);
for(i=1;i<=n && p[i-1]==p[i];++i) ;
if(i-n==1) break;
}
printf("%d %d\n",cnt_whistle,p[0]<<1);
}
return 0;
}
p.s. when you use swap tricks (as in version 3), be careful with the check points, e.g. the initialization part, the conclusion part, especially the items are used by multiple times.
here is mistake I made, 1st, initilization error
position of
cnt_whistle=1;
mistakely put it to declaration part rather than just befor the for loop;
2nd, the third parameter of printf
mistakely wirite
printf("%d %d\n",cnt_whistle,candies[0]<<1);
which should be
printf("%d %d\n",cnt_whistle,p[0]<<1);
版权声明:本文为博主原创文章,未经博主允许不得转载。// p.s. If in any way improment can be achieved, better performance or whatever, it will be well-appreciated to let me know, thanks in advance.
hdu 1034 (preprocess optimization, property of division to avoid if, decreasing order process) 分类: hdoj 2015-06-16 13:32 39人阅读 评论(0) 收藏的更多相关文章
- Hdu 1507 Uncle Tom's Inherited Land* 分类: Brush Mode 2014-07-30 09:28 112人阅读 评论(0) 收藏
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu1171 Big Event in HDU(01背包) 2016-05-28 16:32 75人阅读 评论(0) 收藏
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏
reference: Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.top ...
- hdu 1712, multiple-choice knapsack, 分类: hdoj 2015-07-18 13:25 152人阅读 评论(0) 收藏
reference: 6.4 knapsack in Algorithms(算法概论), Sanjoy Dasgupta University of California, San Diego Chr ...
- hdu 1047 (big integer sum, fgets or scanf, make you func return useful infos) 分类: hdoj 2015-06-18 08:21 39人阅读 评论(0) 收藏
errors made, boundary conditions, <= vs < , decreasing vs increasing , ++, –, '0'/'1' vs 0/1 p ...
- Hdu 1429 胜利大逃亡(续) 分类: Brush Mode 2014-08-07 17:01 92人阅读 评论(0) 收藏
胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Subm ...
- Hdu 1009 FatMouse' Trade 分类: Translation Mode 2014-08-04 14:07 74人阅读 评论(0) 收藏
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1232, disjoint set, linked list vs. rooted tree, a minor but substantial optimization for path c 分类: hdoj 2015-07-16 17:13 116人阅读 评论(0) 收藏
three version are provided. disjoint set, linked list version with weighted-union heuristic, rooted ...
随机推荐
- SVN使用报错 Synchronize operation failed. RA layer request failed svn: REPORT request on
使用SVN同步项目时报错 RA layer request failed svn 百度了下解决方法: 删除C:\Documents and Settings\用户名\Application Data\ ...
- redis+tomcat+nginx session共享
http://www.cnblogs.com/zhrxidian/p/5432886.html系列课程 简洁明了 http://blog.csdn.net/grhlove123/article/det ...
- OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...
- js树目录结构
jstree https://www.jstree.com/demo/ treejs http://www.treejs.cn/v3/demo.php#_206
- 添加无线服务wzcsvc服务,Eventlog服务
<添加eventlog服务.reg> Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont ...
- win7下载
正式版WIN7的64位旗舰版 http://pan.baidu.com/share/link?shareid=60038&uk=3960800092 下面是正式win8Windows 8 64 ...
- linux笔记:网络命令ping,traceroute,ifconfig,netstat;挂载和卸载命令mount,umount
命令名称:ping功能:测试网络连通性命令所在路径:/bin/ping用法:ping [-c] IP地址参数:-c 指定发送次数 命令名称:ifconfig功能:查看和设置网卡信息(临时设置)命令所在 ...
- jmeter 构建一个FTP测试计划
添加用户 第一步你想做的每一个JMeter测试计划是添加一个 线程组 元素. 线程组告诉 JMeter的用户数量你想模拟,用户应该发送的次数 请求,他们应该发送的请求的数量. 继续添加线程组元素首先选 ...
- Access中多表内联的SQL写法
在Access中多表内联,可以使用传统的where条件逐行筛选,如: SELECT SNAME,CNAME,DEGREE FROM STUDENT,COURSE,SCORE where student ...
- uva-----11292 The Dragon of Loowater
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...