zoukankan      html  css  js  c++  java
  • L1 读入

    此篇blog比较了OI里常用四种读入方式

    代码实现和计时

    0. 数据生成器

    (code):

    #include<cstdio>
    #include<cstdlib>
    #include<windows.h>
    #define Re register
    using namespace std;
    const int N=1919810;
    int main(){
        freopen("sample.txt","w",stdout);
        srand(GetTickCount());
        for(Re int i=1;i<=N;++i)
            printf("%d ",rand()-16374);
    }
    

    1. 普通快读

    (code):

    //1919810个数据约210ms
    #include<cstdio>
    #include<windows.h>
    #define Re register
    using namespace std;
    inline int read(){
        Re int x=0,f=1;
        Re char c;
        while((c=getchar()) && (c<'0' || c>'9'))
            if(c=='-')
                f=(int)0xFFFFFFFF;
        do
            x=(x<<3)+(x<<1)+(c^48);
        while((c=getchar()) && c>='0' && c<='9');
        return x*f;
    }
    const int N=1919810;
    long Tick1,Tick2;
    int main(){
        freopen("sample.txt","r",stdin);
        Tick1=GetTickCount();
        for(int i=1;i<=N;++i)
            read();
        Tick2=GetTickCount();
        printf("%ld",Tick2-Tick1);
    }
    

    2. scanf()

    (code):

    //1919810个数据约670ms
    #include<cstdio>
    #include<windows.h>
    using namespace std;
    const int N=1919810;
    int n;
    long Tick1,Tick2;
    int main(){
        freopen("sample.txt","r",stdin);
        Tick1=GetTickCount();
        for(int i=1;i<=N;++i)
            scanf("%d",&n);
        Tick2=GetTickCount();
        printf("%ld",Tick2-Tick1);
    }
    

    3. 普通cin>>

    (code):

    //1919810个数据约1.3s
    #include<iostream>
    #include<cstdio>
    #include<windows.h>
    using namespace std;
    const int N=1919810;
    int n;
    long Tick1,Tick2;
    int main(){
        freopen("sample.txt","r",stdin);
        Tick1=GetTickCount();
        for(int i=1;i<=N;++i)
            cin>>n;
        Tick2=GetTickCount();
        cout<<Tick2-Tick1;
    }
    

    4. cin>> + ios::sync_with_stdio(false)

    (code):

    //1919810个数据约250ms
    #include<iostream>
    #include<cstdio>
    #include<windows.h>
    using namespace std;
    const int N=1919810;
    int n;
    long Tick1,Tick2;
    int main(){
        freopen("sample.txt","r",stdin);
        ios::sync_with_stdio(false);
        Tick1=GetTickCount();
        for(int i=1;i<=N;++i)
            cin>>n;
        Tick2=GetTickCount();
        cout<<Tick2-Tick1;
    }
    

    结论

    • 普通快读略快于优化cin>>
    • 如果懒得写快读就写优化cin>>即可
  • 相关阅读:
    uC/OS-II时间(OS_time)块
    uC/OS-II任务(OS_task)块
    uC/OS-II信号(OS_sem)块
    uC/OS-II队列(OS_q)块
    uC/OS-II互斥信号(OS_mutex)块
    uC/OS-II内存(OS_mem)块
    elasticsearch-installation
    rabbitmq的安装
    str_翻转字符串
    str_2.判断两个字符串是否互为旋转词
  • 原文地址:https://www.cnblogs.com/Ender-hz/p/14872717.html
Copyright © 2011-2022 走看看