hdu 1057 (simulation, use sentinel to avoid boudary testing, use swap trick to avoid extra copy.) 分类: hdoj 2015-06-19 11:58 25人阅读 评论(0) 收藏
use sentinel to avoid boudary testing,
use swap trick to avoid extra copy.
original version
#include <cstdio>
#include <algorithm>
int main() {
//freopen("input.txt","r",stdin);
const int MAXSIZE=22, dimSize=20;
int bacnums1[MAXSIZE][MAXSIZE]={0},bacnums2[MAXSIZE][MAXSIZE]={0}, (*now)[MAXSIZE]=bacnums1, (*next)[MAXSIZE]=bacnums2, dna[16];
int ncase, nday, i,j,tmp;
if(scanf("%d",&ncase)!=1 || ncase<=0) return -1;
while(ncase--) {
scanf("%d",&nday);
for(i=0;i<16;++i) scanf("%d",&dna[i]);
for(i=1;i<=dimSize;++i)
for(j=1;j<=dimSize;++j)
scanf("%d",&now[i][j]);
while(nday-->0) {
for(i=1;i<=dimSize;++i)
for(j=1;j<=dimSize;++j) {
tmp=now[i][j]+now[i-1][j]+now[i+1][j]+now[i][j-1]+now[i][j+1];
next[i][j]=now[i][j]+dna[tmp];
if(next[i][j]<0) { next[i][j]=0; }
else if(next[i][j]>3) { next[i][j]=3; }
}
std::swap(now,next);
}
for(i=1;i<=dimSize;++i) {
for(j=1;j<=dimSize;++j)
switch(now[i][j]) {
case 0: putchar('.'); break;
case 1: putchar('!'); break;
case 2: putchar('X'); break;
case 3: putchar('#'); break;
default: break;
}
putchar('\n');
}
if(ncase) putchar('\n');
}
return 0;
}
version 2, fgets + parsing, write to a buffer then output,
since the lines are quite short, there is no performance improvement.
#include <cstdio>
#include <algorithm>
int main() {
//freopen("input.txt","r",stdin);
const int MAXSIZE=22, dimSize=20, lineMaxSize=500;
int bacnums1[MAXSIZE][MAXSIZE]={0},bacnums2[MAXSIZE][MAXSIZE]={0}, (*now)[MAXSIZE]=bacnums1, (*next)[MAXSIZE]=bacnums2, dna[16];
char line[lineMaxSize],output[lineMaxSize], *pc;
int ncase, nday, i,j,tmp, *p, *pend;
if(scanf("%d",&ncase)!=1 || ncase<=0) return -1;
while(ncase--) {
scanf("%d\n",&nday);
pc=fgets(line,lineMaxSize,stdin);
for(p=dna,pend=dna+16;p!=pend;++p) {
for(;*pc==' ';++pc) ;
if(*pc=='-') { tmp='0'-*++pc; }
else { tmp=*pc-'0'; }
++pc; *p=tmp;
}
for(i=1;i<=dimSize;++i) {
pc=fgets(line,lineMaxSize,stdin);
for(p=&now[i][1],pend=p+dimSize;p!=pend;++p) {
for(;*pc==' ';++pc) ;
*p=*pc++ -'0';
}
}
while(nday-->0) {
for(i=1;i<=dimSize;++i)
for(j=1;j<=dimSize;++j) {
tmp=now[i][j]+now[i-1][j]+now[i+1][j]+now[i][j-1]+now[i][j+1];
next[i][j]=now[i][j]+dna[tmp];
if(next[i][j]<0) { next[i][j]=0; }
else if(next[i][j]>3) { next[i][j]=3; }
}
std::swap(now,next);
}
for(pc=output, i=1;i<=dimSize;++i) {
for(j=1;j<=dimSize;++j)
switch(now[i][j]) {
case 0: *pc++='.'; break;
case 1: *pc++='!'; break;
case 2: *pc++='X'; break;
case 3: *pc++='#'; break;
default: break;
}
*pc++='\n';
}
if(ncase) *pc=0; else *(pc-1)=0;
puts(output);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。// 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 1057 (simulation, use sentinel to avoid boudary testing, use swap trick to avoid extra copy.) 分类: hdoj 2015-06-19 11:58 25人阅读 评论(0) 收藏的更多相关文章
- Design T-Shirt 分类: HDU 2015-06-26 11:58 7人阅读 评论(0) 收藏
Design T-Shirt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- hdu 1050 (preinitilization or postcleansing, std::fill) 分类: hdoj 2015-06-18 11:33 34人阅读 评论(0) 收藏
errors, clauses in place, logical ones, should be avoided. #include <cstdio> #include <cstr ...
- hdu 1041 (OO approach, private constructor to prevent instantiation, sprintf) 分类: hdoj 2015-06-17 15:57 25人阅读 评论(0) 收藏
a problem where OO seems more natural to me, implementing a utility class not instantiable. how to p ...
- Train Problem I 分类: HDU 2015-06-26 11:27 10人阅读 评论(0) 收藏
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Fibonacci Again 分类: HDU 2015-06-26 11:05 13人阅读 评论(0) 收藏
Fibonacci Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 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 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 ...
随机推荐
- jsp通过jQuery返回json数据到页面
1.首先要导入json的包,自己去网站找,总共6个jar包! 2. 在servlet里的写法(仅共参考) JSONObject json = new JSONObject(); String a = ...
- 网站中集成jquery.imgareaselect实现图片的本地预览和选择截取
imgAreaSelect 是由 Michal Wojciechowski开发的一款非常好用的jquery插件,实现了图片的截取功能.其文档和Demo也是很详尽的.大家可以到http://odynie ...
- s3c2440 移值u-boot-2016.03 第4篇 支持NAND flash 识别
1, /include/configs/smdk2440.h 中添加 #define CONFIG_CMD_NAND 编译 drivers/mtd/nand/built-in.o: In functi ...
- CSS3的chapter5
变形样式——transform: translate() ——指定对象的2D translation(2d平移) transform-orig ...
- eclipse https git
open preferences via application menu Window => Preferences (or on OSX Eclipse => Settings). N ...
- 解决Jenkins console输出乱码
背景 Jenkins console输出乱码,如 ������������� 1 解决办法 Jenkins Master 设置utf8 encoding Tomcat 启动脚本 export JAVA ...
- centos BIND服务基础及域主服务器配置
系统信息: Linux localhost.localdomain -.el6.i686 # SMP Tue Dec :: GMT i686 i686 i386 GNU/Linux 因为看的是linu ...
- day5 -指针
指针和指针变量 指针就是地址,地址就是指针 地址就是存放单元的编号 指针变量是存放地址的变量 指针和指针变量是两个不同的概念,但是要注意,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样 指 ...
- fifter过滤器
package fifter; import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterCh ...
- Java面向对象三大特点之继承
概念: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 生活中的继承: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类 ...