借鉴大牛的博客:https://blog.csdn.net/qq_34287501/article/details/70232038
cin 没有 scanf 快,那么还有比 scanf还快的输入吗?那就是getchar(),它比scanf快多了,输入挂就是根据它写的,具体代码(代码是看大牛的)如下:
整数:
- inline bool scan_d(int &num)
- {
- char in;bool IsN=false;
- in=getchar();
- if(in==EOF) return false;
- while(in!='-'&&(in<'0'||in>'9')) in=getchar();
- if(in=='-'){ IsN=true;num=0;}
- else num=in-'0';
- while(in=getchar(),in>='0'&&in<='9'){
- num*=10,num+=in-'0';
- }
- if(IsN) num=-num;
- return true;
- }
浮点数:
- inline bool scan_lf(double &num)
- {
- char in;double Dec=0.1;
- bool IsN=false,IsD=false;
- in=getchar();
- if(in==EOF) return false;
- while(in!='-'&&in!='.'&&(in<'0'||in>'9'))
- in=getchar();
- if(in=='-'){IsN=true;num=0;}
- else if(in=='.'){IsD=true;num=0;}
- else num=in-'0';
- if(!IsD){
- while(in=getchar(),in>='0'&&in<='9'){
- num*=10;num+=in-'0';}
- }
- if(in!='.'){
- if(IsN) num=-num;
- return true;
- }else{
- while(in=getchar(),in>='0'&&in<='9'){
- num+=Dec*(in-'0');Dec*=0.1;
- }
- }
- if(IsN) num=-num;
- return true;
- }
强烈输入挂(直接交,看结果需要用文件):
- #define FI(n) FastIO::read(n)
- namespace FastIO {
- const int SIZE = 1 << 16;
- char buf[SIZE], obuf[SIZE], str[60];
- int bi = SIZE, bn = SIZE, opt;
- int read(char *s) {
- while (bn) {
- for (; bi < bn && buf[bi] <= ' '; bi++);
- if (bi < bn) break;
- bn = fread(buf, 1, SIZE, stdin);
- bi = 0;
- }
- int sn = 0;
- while (bn) {
- for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];
- if (bi < bn) break;
- bn = fread(buf, 1, SIZE, stdin);
- bi = 0;
- }
- s[sn] = 0;
- return sn;
- }
- bool read(int& x) {
- int n = read(str), bf;
- if (!n) return 0;
- int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;
- for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
- if (bf < 0) x = -x;
- return 1;
- }
- };