救命的C++小知识

· · 学习·文化课

我是蒟蒻,大佬勿喷

众所周知

在一些题目中,读入的数据量很大,往往超过了 10 ^ 5(1000000)的数据量,而 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 见祖宗

\text{但有时候}\\ \vdots \\ \text{你忘了!}

所

以

#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()。

谢谢观看 能点个赞吗

超级水题