クイック読み込み

2051 ワード

c++ではcinの読み込み効率は非常に低く、一般的にはscanfを使うことができますが、noip 2011道路が整備され、読み込みデータが超大きい場合もある変態問題もあります.そのため、高速読み込み(デジタルTATしか読めないようですが......)で入力文字をデジタルに変換することができ、効率が高く、入力データ量が特に大きい場合に高速読み込みを採用することで、タイムアウトを避けることができます.もちろん正負は保証されます.
inline int read()
{
    int k=0;
    char f=1;
    char c=getchar();
    for(;!isdigit(c);c=getchar() )
        if(c=='-')
            f=-1;
    for(;isdigit(c);c=getchar() )
        k=k*10+c-'0';
    return k*f;
}

あるいはこう書くこともできます
inline int read()
{
    int k=0;
    char f=1;
    char c=getchar();
    while(c>'9'||c<'0')
        if(c=='-')
        {
            f=-1;
            c=getchar();
        }
    while(c<='9'&&c>='0')
    {
        k=k*10+c-'0';
        c=getchar();
    }
    return k*f;
}

実は本質は同じです.