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 ...
随机推荐
- React高级特性
目录: 容器组件 JSX可展开属性 动画 : CSS3 Transition 默认属性 复用代码:mixin 容器组件 React元素也可以包含其他的子元素,这意味着响应的React组件是一个 容器组 ...
- SqlServer分区表概述(转载)
什么是分区表 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- Java判断访问设备为手机、微信、PC工具类
package com.lwj.util; import javax.servlet.http.HttpServletRequest; /** * 判断访问设备为PC或者手机--工具类 * * @de ...
- Your pain
Your pain is the breaking of the shell that encloses your understanding. 你的痛苦是你那包裹知识的皮壳的破裂.
- 复选框(checkbox)、单选框(radiobox)的使用
复选框(checkbox).单选框(radiobox)的使用 复选框: HTML: // 复选框 <input type="checkbox" name="chec ...
- 浙江理工2015.12校赛-F Landlocked
Landlocked Time Limit: 5 Sec Memory Limit: 128 MB Submit: 288 Solved: 39 Description Canada is not a ...
- PetaPoco的几个特性
在PetaPoco中,Brad并没有定义太多Attribute来修饰Models或Fields.这些为数不多的几个Attribute如下: ColumnAttribute ExplicitColumn ...
- ambari之hbase数据迁移
一.hbase原理剖析 Base是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
- Flowplayer-Subtitle
SOURCE URL: https://flowplayer.org/docs/subtitles.html Setting up Subtitles are loaded with a <tr ...
- 从零开始学iPhone开发(4)——使用WebView
转自 总结关于iPhone中UIWEBVIEW读取本地GBK编码格式html 关于webView读取本地GBK编码的html,尝试了两天,终于成功. 欢喜之余,把感想记下来.一般来说,不成都是人犯错, ...