首页 > 其他分享 >读入读出优化

读入读出优化

时间:2023-11-01 22:25:41浏览次数:42  
标签:ch int 读出 void 读入 res 优化 define

TJDXT

先放代码之后再说原理,如果实在不想知道原理,就直接背过,但是建议看一下下面的注意事项和后面的前几个原理。

代码实现

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rl register ll
#define fom(i, a) for(int i=a; i; -- i)
#define foa(i, a, b) for(int i=a; i < b; ++ i)
#define fos(i, a, b) for(int i=a; i <= b; ++ i)
#define fop(i, a, b) for(int i=a; i >= b; -- i) // 这一部分不是必要,这个是我自己的个人习惯

namespace IO
{
    int pp1=-1; const int pp2=(1<<21)-1; char buf[1<<21],*p1=buf,*p2=buf,buffer[1<<21];
    inline void flush() {fwrite(buffer,1,pp1+1,stdout); pp1=-1;}
    inline void pc(const char ch) {if(pp1==pp2) flush(); buffer[++pp1]=ch;}
    inline char gc(){ return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
    template <class T> inline void read(T &res){char ch=gc();bool f=0;res=0; for(;!isdigit(ch);ch=gc()) f|=ch=='-'; for(;isdigit(ch);ch=gc()) res=(res<<1)+(res<<3)+(ch^48); res=f?~res+1:res;}
    template <class T> inline void ww(T x) { if(!x) pc('0'); else { static int stk[21]; int top = 0; if(x<0) pc('-'),x=~x+1; while(x) stk[top++]=x%10, x/=10; while(top--) pc(stk[top]^48);}}
}

#define ws IO::pc(' ')
#define wl IO::pc('\n')
#define ww(x) IO::ww(x)
#define read(x) IO::read(x)
#define flush() IO::flush()

int main()
{
   // balabala...
    flush(); return 0;
}

注意事项

当你使用了这个快读快写之后你应该要注意,不能够将 cin, scanf 和 read 相互之间混用,因为会导致缓冲区紊乱。同时cout, printf 和 ww 也是不能混用的,原因同上。如果非要混用输出,那么就每一段之后进行一次 flush 操作。

eg:

ww(x), wl, flush(); // 这个flush很重要!!不然你会看见一堆很乱的输出,不知所云
cout << "asd" << endl;
printf("move disk %d from %c to %c\n", n, a, c);

还有一点就是我们如果使用了read 我们只能用 freopen 来读入文件。

原理

我们用 buf 来枚举读入的缓冲区,用 buffer 来模拟输出的缓冲区,然后每个缓冲区域两个指针。

我们的 flush 就是将目前缓冲区里面的一口气全吐出去。

然后我们的 gc 是用来模拟 getchar 也是先不断读入,然后如果读到缓冲区已经达到极限。就一口气吐出去。

然后快读快写就是很板的东西了。isdigit 是可以判断这个是不是数字,我们首先要处理数字前面的符号,换行空格啥的。但是我们有用的只有符号,所以就一个位运算搞定结果。然后我们就读入后面的数字,也是位运算,读者自行理解不难。

后面的快写为了减小常数,就可以写成一个栈的形式,读者自理解平凡。

write at the back

其实如果你实在搞不懂上面的,你可以换成下面的板子。这个板子没有什么限制,就是在读入极多数字(1e9 个 18 位数字)的时候会比上面慢上一点。

但是用来吊打 cin cout printf scanf 没有什么问题。

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define rl register ll 

template <class T> inline void read(T &res) 
{
    char ch = getchar(); bool f = 0; res = 0;
    for(; !isdigit(ch); ch = getchar()) f |= ch == '-';
    for(; isdigit(ch); ch = getchar()) res = (res << 1) + (res << 3) + (ch ^ 48);
    res = f ? ~res + 1 : res;
}

template <class T> inline void waw(T x) { if(x > 9) waw(x / 10); putchar(x % 10 ^ 48); }
template <class T> inline void ww(T x) { if(x < 0) x = ~x + 1, putchar('-'); waw(x); }

// 这里的输出你也可以自己写个栈,但是懒鱼我觉得这么写简单以前(

上面的代码是懒鱼我直接在 \(cnblog\) 上面打的,如果在使用的时候发现有 \(bug\),请联系懒鱼改过来。

祝大家年能够快乐的卡常 A 题。

标签:ch,int,读出,void,读入,res,优化,define
From: https://www.cnblogs.com/carp-oier/p/fastIO.html

相关文章

  • 查询算法——顺序查找(优化),二分查找(递归)
    顺序查找顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构,从第一个元素开始逐个与需要查找的元素x进行比较,当比较到元素值相同时,返回元素m的下标,如果比较到最后都没有找到,则返回-1;时间复杂度为O(n)点击查看代码publicstaticvoidm......
  • 京东商品详情接口,驱动业务增长与优化用户体验
    京东商品详情接口可以帮助开发者获取商品详情数据,从而驱动业务增长和优化用户体验。以下是使用京东商品详情接口的具体方法和应用效果:方法:在京东开放平台注册开发者账号并创建应用。获取密钥(AppKey和AppSecret)。封装JD.item_get-获取商品详情数据。获取API调用SDK demo......
  • Opencv中goodFeaturesToTrack函数(Harris角点、Shi-Tomasi角点检测)算子速度的进一步
    搜索到某个效果很好的视频去燥的算法,感觉效果比较牛逼,就是速度比较慢,如果能做到实时,那还是很有实用价值的。于是盲目的选择了这个课题,遇到的第一个函数就是角点检测,大概六七年用过C#实现过Harris角点以及SUSAN角点。因此相关的理论还是有所了解的,不过那个时候重点在于实现,对于......
  • SQL Server 2012 的优化设置,以下是一些常见的建议和配置选项
    对于SQLServer2012的优化设置,以下是一些常见的建议和配置选项:内存设置:最大内存限制(MaxServerMemory):根据服务器的可用内存和其他应用程序的需求,设置SQLServer实例可以使用的最大内存量。这可以通过SQLServerManagementStudio(SSMS)或sp_configure命令进行配置。......
  • Kafka基本原理、生产问题总结及性能优化实践 | 京东云技术团队
    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日......
  • DP查缺补漏之01背包优化原理
    DP查缺补漏之01背包优化原理先复习一下基本知识状态假设DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值)状态转移DP[I][J]=max(DP[I-1][J],DP[I-1][J-V[I]]+W[I])对于第\(i\)个物品,两种可能装入背包则状态应通过前\(i-1\)个物品,容量小于\(j......
  • [win]我的电脑优化
    我如何优化自己的电脑:1.注意外设的延迟:  游戏键盘和游戏鼠标的延迟和精准度应该都还不错   买的微软的人体工学键盘实在是震撼到了我不仅舒服,而且延迟低,在打字的时候就能意识到,延迟低就是生产力!   在windows下键盘和注册表里对延迟进行设置   2.装cccleaner ......
  • Kafka基本原理、生产问题总结及性能优化实践
    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问......
  • Prometheus指标优化
    背景1、目前生产环境的prometheus偶发内存不足OOM现象【宿主机24G内存】2、pushgateway拉取会出现超时情况3、上述情况已经影响到监控告警系统的稳定性,需要及时介入治理。 优化措施1、调整pushgateway①、调大prometheus去拉取pushgateway的时间间隔和拉取超时时间#这里只......
  • WOA-CNN基于鲸鱼算法优化卷积神经网络的多变量回归预测 可直接运行 注释清晰适合新手
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......