c++中快读
本文最后更新于 373 天前,其中的信息可能已经有所发展或是发生改变。

c++中是自带输入的(废话),目前c++中有两种输入方法:

int main(){
    int n;
    cin>>n;
    return 0;
}

这种方法的优点是代码简洁,适合初学者。可是它太了。(有一次一道题我用cin结果输入就花了1s多);

int main(){
    int n;
    scanf("%d",n);
    return 0;
}

这种方法相比cin快多了!可是有些毒瘤会超时。。。

当然,cin可以用std::ios::sync_with_stdio(false)来解决它输入慢的问题。

但是在noip中会爆零。因为noip只能用freopen,而freopen是stdio包含的,而std::ios::sync_with_stdio用了就不能用stdio。

手写快速读入的速度

首先声明一点:快读不是万能的,有些毒瘤会卡read。但,懂总比不懂好。

快读的原理是getchar()比cin和scanf快。所以,快读就是把输入的字符转为int。

inline long long read(){
     long long ans=0;
     char last=' ',ch=getchar();
     while(ch<'0' || ch>'9')last=ch,ch=getchar();
     while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
     if(last=='-')ans=-ans;
     return ans;
}

__int128的读写

__int128是c++中最大整型变量,存储范围为-2^127~2^127-1

但是__int128变量使用cin和scanf会报错:

tempCodeRunnerFile.cpp: In function 'int main()':
tempCodeRunnerFile.cpp:5:8: error: no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and '__int128')
     cin>>n;
     ~~~^~~
In file included from C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/sstream:38,
                 from C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/complex:45,
                 from C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/ccomplex:39,
                 from C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32/bits/stdc++.h:52,
                 from tempCodeRunnerFile.cpp:1:
C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/istream:120:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]' <near match>        
       operator>>(__istream_type& (*__pf)(__istream_type&))
       ^~~~~~~~
C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/istream:120:7: note:   conversion of argument 1 would be ill-formed:
tempCodeRunnerFile.cpp:5:10: error: invalid conversion from '__int128' to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&)' {aka 'std::basic_istream<char>& (*)(std::basic_istream<char>&)'} [-fpermissive]
     cin>>n;

这时候,只能用快读才能输入输出。。。(我也是因为这才了解快读的)

a+b problem with __int128:

#include <bits/stdc++.h>
using namespace std;
inline __int128 read(){
    __int128 x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
inline void print(__int128 x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
}
int main(void){
    __int128 a = read();
    __int128 b = read();
    print(a + b);
    cout<<endl;
    return 0;
}

p.s:noip 不可用__int128

这篇就结束了,下次再见。

版权声明:本文为博主Alex172原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://nth.ink/cpp/P2386.html

(广告由我们的赞助商提供,内容与本站无关)

评论

  1. EricNTH 博主
    iPhone Safari 13.1.1
    1年前
    2020-7-25 20:39:07

    呃呃还有这种操作 长见识了

    • EricNTH 博主
      iPhone Safari 13.1.1
      1年前
      2020-7-25 20:44:17

      速度是getchar/putchar快于stdio快于iostream吧

      • EricNTH 博主
        iPhone Safari 13.1.1
        1年前
        2020-7-25 20:48:41

        noip不能用 害
        话说您什么时候回归的

      • Alex172
        Windows Firefox 79.0
        1年前
        2020-7-26 9:00:25

        eh?

  2. NSObject 23786 博主
    iPad Chrome 80.0.3987.95
    1年前
    2020-7-26 7:50:10

    并不是,使用Iossyncwithcstdio以后noip不会爆零,你这部分讲的很奇怪
    但是这时候如果同时使用cincout和scanfprintf的话,会爆零
    所以用iossyncwithstdio的时候只能用cincout,但不会爆零

    • NSObject 23786 博主
      iPad Chrome 80.0.3987.95
      1年前
      2020-7-26 7:50:50

      打了这条语句以后不能混用

      • Alex172
        Windows Firefox 79.0
        1年前
        2020-7-26 9:03:52

        freopen是在<stdio.h>头文件的。
        ios::sync_with_stdio是关闭了混用防止混乱的指针
        正因为有了指针cin才那么慢

      • NSObject 23786 博主
        Macintosh Chrome 84.0.4147.89
        1年前
        2020-7-28 12:14:53

        反正我们老师说可以用(误导

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇