zoukankan      html  css  js  c++  java
  • ACM:读入优化

    两个简单的读入优化

    1 int getin(){
    2     int ans=0;char tmp;bool sign=0;
    3     while(!isdigit(tmp=getchar()) && tmp!='-');
    4     if(tmp=='-')sign=1,tmp=getchar();
    5     do ans=(ans<<3)+(ans<<1)+tmp-'0';
    6     while(isdigit(tmp=getchar()));
    7     return  sign?-ans:ans;
    8 }
     1 inline int read(){
     2     int p,data=0;
     3     char ch=0;
     4     while ((ch!='-') && ch<'0' || ch>'9') ch=getchar();
     5     if (ch=='-')
     6     {
     7         p=-1;
     8         ch=getchar();
     9     } else p=1;
    10     while (ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();
    11     return data*p;
    12 }

    大佬的读入优化

    from:https://blog.csdn.net/x_iya/article/details/9003416

      1 namespace fastIO{
      2     #define BUF_SIZE 100000
      3     #define OUT_SIZE 100000
      4     #define ll long long
      5     //fread->read
      6     bool IOerror=0;
      7     inline char nc(){
      8         static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
      9         if (p1==pend){
     10             p1=buf; pend=buf+fread(buf,1,BUF_SIZE,stdin);
     11             if (pend==p1){IOerror=1;return -1;}
     12             //{printf("IO error!
    ");system("pause");for (;;);exit(0);}
     13         }
     14         return *p1++;
     15     }
     16     inline bool blank(char ch){return ch==' '||ch=='
    '||ch=='
    '||ch=='	';}
     17     inline void read(int &x){
     18         bool sign=0; char ch=nc(); x=0;
     19         for (;blank(ch);ch=nc());
     20         if (IOerror)return;
     21         if (ch=='-')sign=1,ch=nc();
     22         for (;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
     23         if (sign)x=-x;
     24     }
     25     inline void read(ll &x){
     26         bool sign=0; char ch=nc(); x=0;
     27         for (;blank(ch);ch=nc());
     28         if (IOerror)return;
     29         if (ch=='-')sign=1,ch=nc();
     30         for (;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
     31         if (sign)x=-x;
     32     }
     33     inline void read(double &x){
     34         bool sign=0; char ch=nc(); x=0;
     35         for (;blank(ch);ch=nc());
     36         if (IOerror)return;
     37         if (ch=='-')sign=1,ch=nc();
     38         for (;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
     39         if (ch=='.'){
     40             double tmp=1; ch=nc();
     41             for (;ch>='0'&&ch<='9';ch=nc())tmp/=10.0,x+=tmp*(ch-'0');
     42         }
     43         if (sign)x=-x;
     44     }
     45     inline void read(char *s){
     46         char ch=nc();
     47         for (;blank(ch);ch=nc());
     48         if (IOerror)return;
     49         for (;!blank(ch)&&!IOerror;ch=nc())*s++=ch;
     50         *s=0;
     51     }
     52     inline void read(char &c){
     53         for (c=nc();blank(c);c=nc());
     54         if (IOerror){c=-1;return;}
     55     }
     56     //getchar->read
     57     inline void read1(int &x){
     58         char ch;int bo=0;x=0;
     59         for (ch=getchar();ch<'0'||ch>'9';ch=getchar())if (ch=='-')bo=1;
     60         for (;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar());
     61         if (bo)x=-x;
     62     }
     63     inline void read1(ll &x){
     64         char ch;int bo=0;x=0;
     65         for (ch=getchar();ch<'0'||ch>'9';ch=getchar())if (ch=='-')bo=1;
     66         for (;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar());
     67         if (bo)x=-x;
     68     }
     69     inline void read1(double &x){
     70         char ch;int bo=0;x=0;
     71         for (ch=getchar();ch<'0'||ch>'9';ch=getchar())if (ch=='-')bo=1;
     72         for (;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar());
     73         if (ch=='.'){
     74             double tmp=1;
     75             for (ch=getchar();ch>='0'&&ch<='9';tmp/=10.0,x+=tmp*(ch-'0'),ch=getchar());
     76         }
     77         if (bo)x=-x;
     78     }
     79     inline void read1(char *s){
     80         char ch=getchar();
     81         for (;blank(ch);ch=getchar());
     82         for (;!blank(ch);ch=getchar())*s++=ch;
     83         *s=0;
     84     }
     85     inline void read1(char &c){for (c=getchar();blank(c);c=getchar());}
     86     //scanf->read
     87     inline void read2(int &x){scanf("%d",&x);}
     88     inline void read2(ll &x){
     89         #ifdef _WIN32
     90             scanf("%I64d",&x);
     91         #else
     92         #ifdef __linux
     93             scanf("%lld",&x);
     94         #else
     95             puts("error:can't recognize the system!");
     96         #endif
     97         #endif
     98     }
     99     inline void read2(double &x){scanf("%lf",&x);}
    100     inline void read2(char *s){scanf("%s",s);}
    101     inline void read2(char &c){scanf(" %c",&c);}
    102     inline void readln2(char *s){gets(s);}
    103     //fwrite->write
    104     struct Ostream_fwrite{
    105         char *buf,*p1,*pend;
    106         Ostream_fwrite(){buf=new char[BUF_SIZE];p1=buf;pend=buf+BUF_SIZE;}
    107         void out(char ch){
    108             if (p1==pend){
    109                 fwrite(buf,1,BUF_SIZE,stdout);p1=buf;
    110             }
    111             *p1++=ch;
    112         }
    113         void print(int x){
    114             static char s[15],*s1;s1=s;
    115             if (!x)*s1++='0';if (x<0)out('-'),x=-x;
    116             while(x)*s1++=x%10+'0',x/=10;
    117             while(s1--!=s)out(*s1);
    118         }
    119         void println(int x){
    120             static char s[15],*s1;s1=s;
    121             if (!x)*s1++='0';if (x<0)out('-'),x=-x;
    122             while(x)*s1++=x%10+'0',x/=10;
    123             while(s1--!=s)out(*s1); out('
    ');
    124         }
    125         void print(ll x){
    126             static char s[25],*s1;s1=s;
    127             if (!x)*s1++='0';if (x<0)out('-'),x=-x;
    128             while(x)*s1++=x%10+'0',x/=10;
    129             while(s1--!=s)out(*s1);
    130         }
    131         void println(ll x){
    132             static char s[25],*s1;s1=s;
    133             if (!x)*s1++='0';if (x<0)out('-'),x=-x;
    134             while(x)*s1++=x%10+'0',x/=10;
    135             while(s1--!=s)out(*s1); out('
    ');
    136         }
    137         void print(double x,int y){
    138             static ll mul[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,
    139                 1000000000,10000000000LL,100000000000LL,1000000000000LL,10000000000000LL,
    140                 100000000000000LL,1000000000000000LL,10000000000000000LL,100000000000000000LL};
    141             if (x<-1e-12)out('-'),x=-x;x*=mul[y];
    142             ll x1=(ll)floor(x); if (x-floor(x)>=0.5)++x1;
    143             ll x2=x1/mul[y],x3=x1-x2*mul[y]; print(x2);
    144             if (y>0){out('.'); for (size_t i=1;i<y&&x3*mul[i]<mul[y];out('0'),++i); print(x3);}
    145         }
    146         void println(double x,int y){print(x,y);out('
    ');}
    147         void print(char *s){while (*s)out(*s++);}
    148         void println(char *s){while (*s)out(*s++);out('
    ');}
    149         void flush(){if (p1!=buf){fwrite(buf,1,p1-buf,stdout);p1=buf;}}
    150         ~Ostream_fwrite(){flush();}
    151     }Ostream;
    152     inline void print(int x){Ostream.print(x);}
    153     inline void println(int x){Ostream.println(x);}
    154     inline void print(char x){Ostream.out(x);}
    155     inline void println(char x){Ostream.out(x);Ostream.out('
    ');}
    156     inline void print(ll x){Ostream.print(x);}
    157     inline void println(ll x){Ostream.println(x);}
    158     inline void print(double x,int y){Ostream.print(x,y);}
    159     inline void println(double x,int y){Ostream.println(x,y);}
    160     inline void print(char *s){Ostream.print(s);}
    161     inline void println(char *s){Ostream.println(s);}
    162     inline void println(){Ostream.out('
    ');}
    163     inline void flush(){Ostream.flush();}
    164     //puts->write
    165     char Out[OUT_SIZE],*o=Out;
    166     inline void print1(int x){
    167         static char buf[15];
    168         char *p1=buf;if (!x)*p1++='0';if (x<0)*o++='-',x=-x;
    169         while(x)*p1++=x%10+'0',x/=10;
    170         while(p1--!=buf)*o++=*p1;
    171     }
    172     inline void println1(int x){print1(x);*o++='
    ';}
    173     inline void print1(ll x){
    174         static char buf[25];
    175         char *p1=buf;if (!x)*p1++='0';if (x<0)*o++='-',x=-x;
    176         while(x)*p1++=x%10+'0',x/=10;
    177         while(p1--!=buf)*o++=*p1;
    178     }
    179     inline void println1(ll x){print1(x);*o++='
    ';}
    180     inline void print1(char c){*o++=c;}
    181     inline void println1(char c){*o++=c;*o++='
    ';}
    182     inline void print1(char *s){while (*s)*o++=*s++;}
    183     inline void println1(char *s){print1(s);*o++='
    ';}
    184     inline void println1(){*o++='
    ';}
    185     inline void flush1(){if (o!=Out){if (*(o-1)=='
    ')*--o=0;puts(Out);}}
    186     struct puts_write{
    187         ~puts_write(){flush1();}
    188     }_puts;
    189     inline void print2(int x){printf("%d",x);}
    190     inline void println2(int x){printf("%d
    ",x);}
    191     inline void print2(char x){printf("%c",x);}
    192     inline void println2(char x){printf("%c
    ",x);}
    193     inline void print2(ll x){
    194         #ifdef _WIN32
    195             printf("%I64d",x);
    196         #else
    197         #ifdef __linux
    198             printf("%lld",x);
    199         #else
    200             puts("error:can't recognize the system!");
    201         #endif
    202         #endif
    203     }
    204     inline void println2(ll x){print2(x);printf("
    ");}
    205     inline void println2(){printf("
    ");}
    206     #undef ll
    207     #undef OUT_SIZE
    208     #undef BUF_SIZE
    209 };
    210 using namespace fastIO;
  • 相关阅读:
    F#周报2019年第33期
    The .NET World——gPRC概览
    编程杂谈——Non-breaking space
    F#周报2019年第32期
    F#周报2019年第31期
    F#周报2019年第30期
    pat 乙级 1015. 德才论 (25) c++
    pat 乙级 1008. 数组元素循环右移问题 (20)
    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
    PAT-B 1005. 继续(3n+1)猜想 (25) c++
  • 原文地址:https://www.cnblogs.com/jyroy/p/9785374.html
Copyright © 2011-2022 走看看