快读&&快写——模板与解释

发布于 2018-10-03  278 次阅读


(int)
本文将教你如何自制读入,写入函数(不常用)

不保证在一些玄学情况下变快

前言

当初我在昌邑一中时,day1 T1数据非常大(机房电脑也特别慢),导致在本地测试大样例scanf过不去(不过评测机可以过),于是在此介绍一下快读&&快写。

原理

有没有发现putchar()、getchar()特别快,快读&&快写就是用他们读入(写入相反)char字符后转为int类型的。

实现

模板&&解释释

inline int qr()
{
    int data = 0, k = 1;    //data存放转换后的数据,k存正负数
    char c;

    for (c = getchar(); (c > '9' || c < '0') && c == '-'; c = getchar())    //过滤无用字符
        if (c == '-')
            k = -1;

    for (; '0' <= c && c <= '9'; c = getchar())
        data = data * 10 + c - '0';     //char转int后存入data
    return data * k;        //返回 (±)data
}

inline void qw(int x)       //这个估计能看懂,不打注释了
{
    if (x<0)
    {
        putchar('-');
        x=-x;
    }
    if(x>9) qw(x/10);
    putchar(x%10+'0');
}

优化

  1. 莴据MoveToEx神犇的博文来看,for改为while更快

  2. 快读可以用fread优化。

[shq‘s-blog] https://blog.ishq.site/articles/OI%E5%B8%B8%E6%95%B0%E4%BC%98%E5%8C%96-%E8%BF%9B%E9%98%B6/

练习

[A+B Problem] https://www.luogu.org/problemnew/show/P1001

[排队接水] https://www.luogu.org/problemnew/show/P1223