震惊!用了此方法后,TLE的代码AC了!

通过自定义类似fread()的函数nc()实现快速读取,优化读取速度近4倍,有效解决TLE问题。注意不要与scanf()混用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

昨天帮Sdywolf查代码……
解法和标算一模一样,而且看不出常数大的地方,但是就是TLE了
经过一番检验,发现竟然是读优的问题!

正文

原来的读优一直调用getchar()……
以为挺快的,没想到会TLE
Manchery大神自己定义了一个与getchar()功能相似的函数:

inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}

这里简略地解释一下:
这个函数主要的原理是利用fread()来加速读入
fread()的4个参数依次是:本次读入的起始指针,单位空间的字节数,要读入的单位数,读入的文件流
并且返回读入成功的单位数

先定义了一个缓存空间buf[],以及一头一尾两个指针
每次判断,如果缓存空间有内容,就返回一个char
如果缓存空间没有了,就再次fread()填满整个缓存空间
如果读入失败,就说明是文件末尾

实验证明,基于nc()的读优比基于getchar()的读优快了近4倍!(极端条件下)

注意事项

切记:不要与scanf()混用!因为文件流的一些内容可能已经被加载到缓存空间里了
不过在第一次使用fread()之前还是可以scanf()的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值