1. 程式人生 > >ACM:讀入優化

ACM:讀入優化

can net double \n void sig color || tmp

兩個簡單的讀入優化

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!\n");system("pause");for (;;);exit(0);} 13 } 14 return *p1++; 15 } 16 inline bool blank(char ch){return ch== ||ch==\n||ch==\r||ch==\t;} 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(\n); 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(\n); 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(\n);} 147 void print(char *s){while (*s)out(*s++);} 148 void println(char *s){while (*s)out(*s++);out(\n);} 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(\n);} 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(\n);} 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++=\n;} 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++=\n;} 180 inline void print1(char c){*o++=c;} 181 inline void println1(char c){*o++=c;*o++=\n;} 182 inline void print1(char *s){while (*s)*o++=*s++;} 183 inline void println1(char *s){print1(s);*o++=\n;} 184 inline void println1(){*o++=\n;} 185 inline void flush1(){if (o!=Out){if (*(o-1)==\n)*--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\n",x);} 191 inline void print2(char x){printf("%c",x);} 192 inline void println2(char x){printf("%c\n",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("\n");} 205 inline void println2(){printf("\n");} 206 #undef ll 207 #undef OUT_SIZE 208 #undef BUF_SIZE 209 }; 210 using namespace fastIO;

ACM:讀入優化