ACM:读入优化

Posted jyroy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于ACM:读入优化的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5972 Regular Number(ShiftAnd+读入优化)

读入优化 && 输出优化

优化 C# 代码片段、ObservableCollection 和 AddRange

[读入输出优化]4.15正确的打开方式

读入优化

读入输出优化