救命的C++小知识
King_and_Grey · · 学习·文化课
我是蒟蒻,大佬勿喷
众所周知
在一些题目中,读入的数据量很大,往往超过了 cin 和 cout 的读入输出的速度很慢(是因为 cin 和 cout 为了兼容C语言的读入输出在性能上做了妥协),远不如 scanf 和 printf 的速度。
但是本蒟蒻不会 scanf 和printf
所以可以 cin 和 cout 解锁
敲黑板
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
对cin和cout进行解锁使cin和cout的速度几乎接近 scanf 和 printf(甚至超过),这样避免输入输出超时。
注意:cin cout解锁使用时,不能与 scanf,getchar,printf,cin.getline()混用,否则会出错。
注意,也不能与 freopen 连用!!!
如果觉得还是太慢了 就在输入输出上做文章
快读快写模板
//注意用了这个就不能用解锁了
#include <iostream>
using namespace std;
#define int long long;
inline int read(){
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)){
if (ch == '-')
f = -1;
ch = getchar();
}
while (isdigit(ch)){
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
inline void write(int x){
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
signed main(){
int a = read();
write(a);
return 0;
}
如果嫌烦可以继续使用
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
输出数字时加上
to_string()
转化成字符串输出
本蒟蒻不确定转化成字符输出一定能提升速度
还有 不要使用 endl ,换成 \n。
我们还可以手动开启 O2,O3。 代码如下:
#pragma GCC optimize(2) //手动开启O2
#pragma GCC optimize(3) //手动开启O3
ios::sync_with_stdio(false); 原理解释
ios::sync_with_stdio(false); 是在输出够一定数量后或程序终止了后一起输出。使用了 system 函数的记得去掉!!!
注意:如果加入之后还是 TLE 那就是时间复杂度不对,请自行修改主程序代码
众所周知 + 1
不开 long long 见祖宗
所
以
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
return 0;
}
#define int long long 了解一下,注意:使用#define int long long 要用 signed main()。
谢谢观看 能点个赞吗
超级水题