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 ...
随机推荐
- 根据出生日期计算年龄的sql各种数据库写法
ORACLE数据库: ) KINGBASE数据库: DB2数据库: TIMESTAMPDIFF(,
- 注意64位整形,int64,long long
在Xplorer中编译运行: int64_t mask = 0xffffffffffffffffLL; if((j+64)>width) { printf("%x %d " ...
- listview去掉底部多出的边框黑色
listview去掉底部多出的边框黑色 android:fadingEdge="none" //去掉listview黑色底边 listview.setDivider(null);
- 易通电脑锁2007V6.3.3.3无法卸载问题解决办法
易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...
- ubuntu server nginx 安装与配置
ubuntu server nginx 安装与配置 一:关于nginx http://wiki.ubuntu.org.cn/Nginx http://nginx.org/cn http://wiki. ...
- unity入门笔记
我于2010年4月1日硕士毕业加入完美时空, 至今5年整.刚刚从一家公司的微端(就是端游技术+页游思想, 具体点就是c++开发, directX渲染, 资源采取所需才会下载)项目的前端主程职位离职, ...
- 使用委托(C# 编程指南)
原文地址:https://msdn.microsoft.com/zh-cn/library/ms173172.aspx 委托是安全封装方法的类型,类似于 C 和 C++ 中的函数指针. 与 C 函数 ...
- Excel中的表单控件和active控件
EXCEL中有两种控件:表单控件和active控件 表单控件是excel5和excel95开始使用的,从excel97开始,active控件开始出现 关于表单控件和active控件的区别和使用范围,网 ...
- 使用 Fresco加载图片
概念: ImagePipeline ——负责从网络.本地图片.Content Provider(内容提供者)或者本地资源那里获取图片,压缩保存在本地存储中和在内存中保存为压缩的图片 Drawee——处 ...
- 用HTML5实现的各种排序算法的动画比较 及算法小结
用HTML5实现的各种排序算法的动画比较 http://www.webhek.com/misc/comparison-sort/ 几种排序算法效率的比较 来源:http://blog.chinauni ...