【考试技巧】输入输出优化

发布时间:2024-12-19 14:33

制定每日学习计划,保持语言输入输出的连续性 #生活技巧# #学习技巧# #语言学习策略#

§缘

    不知大家有没有这种体验,做一道题目,即便自己用了很有可能过的算法(如O(nlogn)、O(n^2)),但是不知是什么原因(当然很可能是代码丑)而超时或耗时较长(什么800ms之类),把代码丑这一因素完全摒除(把代码写精简,不啰嗦做无用的事),然后还是不能取得高分,那么我们就要看看是不是输入输出过大了。以下就是一个例子:

时间超限(代码丑&没有输入输出优化)94%

    因为cin、cout可以说是慢到极点(需要判断不同数据结构用不同方式输入输出),而scanf和printf又需要兼容各种%d、%lf、%lld(%I64d)、%x、%o、%f、%s、%c、%g各种奇奇怪怪的输入输出模式,当然也会耗些时啦(我的理解是这样)。所以我们就需要一种更加迅捷、精巧、无脑的输入输出方式,于是就有了接下来的内容。

    §思

    可是我们知道了scanf和cin的坏处,却不知道怎么去解决依然不行。什么东西可以快过scanf呢?其实,我们只要用心观察过scanf读入的写法就可以知道——相比整数,字符好像优先级更高。因为同样是数组,字符数组不用加&取值符就可以输出(当然可能还是我的臆想)。所以我们可以很容易的发现,getchar()和putchar()其实是很快很快的!于是乎,读入就可以向getchar()学习,写出一个极速无脑的getint(),而输出则有putint()。

    §寻

    好吧,那么我们就可以使用最为原始的方法,像一个三岁小孩一样去读入每一个数字了。具体实现输入就不用说了,可以自己很容易的完成。想起了2016年的NOIP普及组初赛……

    那么我们看这个试题,就知道读入优化怎么写了(什么?你不知道被抠掉的空是什么?)还是得放上代码:

int getint()

{

int p=0;

bool f=0;

char c=getchar();

while((c<'0'||c>'9')&&c!='-')

c=getchar();

if(c=='-')

{

f=1;

c=getchar();

}

while(c>='0'&&c<='9')

{

p=p*10+(c-'0');

c=getchar();

}

if(f)p=-p;

return p;

}

    输出优化就没有多大必要,可以使用递归输出,如果一个数小于10,直接输出,否则先输出十位及以上部分,然后输出个位。如果是负数,先输出‘-’,再当成正数输出即可。代码也是有的:

void putint(int p)

{

if(p<0)putchar('-'),p=-p;

if(p>9)putint(p/10);

putchar(p%10+'0');

}

    §结

    至此,我们已经知道了输入优化和输出优化了,当然如果你用了这个还是超时,请把你的代码写好看一点(或是摒弃你的算法,换一个高效的),不然你还是只能看到:

第1次提交:时间超限(代码丑)99%

第2次提交:时间超限(代码丑)99%

第3次提交:时间超限(代码丑)99%

第4次提交:时间超限(代码丑)99%

。。。

第N次提交:时间超限(代码丑)99%

网址:【考试技巧】输入输出优化 https://www.yuejiaxmz.com/news/view/518842

相关内容

多输入多输出
学习=输入+输出
Windows7输入法设置与优化指南:提升打字效率的小技巧
unity 输入框弹出输入法
创新笔画输入法:提升文字输入效率
Python菜鸟在成长——Python输入与输出
输入能量=输出有效能量输出无效能量.PPT
ZFTYQ省心省电的三相调压器,输入电压三相380V,输出0
2024年输入法哪个好用?盘点最受欢迎的五款输入法
在手机上使用日语输入法?你需要知道这些技巧

随便看看