明明在c語言中有scanf()、printf(),c++中有cin、cout,為什麼我們還要用輸入輸出外掛程式呢?
這個問題很明顯,一定是因為這些輸入輸出函式功能過於強大而導致效率低,(很多時候,功能越強大的東西越臃腫),而我們使用的輸入輸出外掛程式既然叫外掛程式,那說明其一定有很大的優勢,而這方面優勢就體現在術有專攻上。原來的輸入輸出函式因為要應對不同型別的輸入輸出,所以內部一定做了很多的判斷,而我們在遇見實際問題時,往往都是對特定型別的進行輸入輸出,所以這些判斷就顯得無用且浪費資源。這時,我們的輸入輸出外掛程式也就有了存在的必要性,也就應運而生。
我們都知道,scanf()、printf()、cin、cout其實就是對其他一些基礎的獲取或輸出語句(getchar() putchar()等)進行封裝,而這些基礎的函式功能弱,效率高,所以我們的輸入輸出外掛程式也是仿照著scanf()、printf()、cin、cout來實現的,只不過做了針對性的改造,最終我們改造出來多種功能比scanf()等弱、比getchar()等強,效率比scanf()等高、比gerchar()等低的函式,從而達到針對性的作用,減少了不必要的資源消耗。
當然輸入輸出外掛程式一般用在大量輸入輸出的情況下,這樣價效比才高一些,否則得不償失(犧牲了**長度而換來了微不足道的效率提公升)。
大佬的:
#include using namespace std;
inline int read()
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
if (f) x=-x;
return x;
}
acm模版
template
inline
void scan_d(t &ret)
}
template
inline
bool scan_d(t &ret)
while (c != '-' && (c < '0' || c > '9'))
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0' && c <= '9')
ret *= sgn;
return1;}
template
inline
void print_d(t x)
putchar(x % 10 + '0');
}
int scan()
else
if(ch >= '0' && ch <= '9')
while ((ch = getchar()) >= '0' && ch <= '9')
return flag ? -res : res;
} void out(int a)
if (a >= 10)
putchar(a % 10 + '0');
} int main()
return
0;
}
template
bool scan_d(t &ret)
while (c! = '-' && c != '.' && (c < '0' || c > '9'))
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0' && c <= '9')
if (c == ' ' || c == '\n')
while (c = getchar(), c >= '0' && c <= '9')
ret *= sgn;
return1;}
template
inline
void print_d(int x)
putchar(x % 10 + '0');
}
char buf[maxin], *ps = buf, *pe = buf + 1;
inline
void rnext()
return ;
}template
inline
bool in(t &ans)
do} while (!isdigit(*ps) && ps != pe);
if (ps == pe)
dowhile (isdigit(*ps) && ps != pe);
ans *= f;
return
true;
}char bufout[maxout], outtmp[50], *pout = bufout, *pend = bufout + maxout;
inline
void write()
inline
void out_char(char c)
return ;
}inline
void out_str(char *s)
}return ;
}template
inline
void out_int(t x)
if (x < 0)
int len = 0;
while (x)
outtmp[len] = 0;
for (int i = 0, j = len - 1; i < j; i++, j--)
out_str(outtmp);
return ;
}
上面那個輸入正負整數的有點難用。
再附乙個:
void
in(int &m)
}for (m = 0; ch >= '0' && ch <= '9'; ch = getchar())
if (flag)
}
暫時遇見這麼多,先這樣吧,也沒有找到其他更稀奇的外掛程式,等遇見了再做進一步的補充吧!
struct fastio
inline
int xchar()
if (pos == len)
return buf[pos++];
}inline
int xint()
if (c == '-')
for (; '0'
<= c && c <= '9'; c = xchar())
return x * s;
}~fastio()
}} io;
2017.8.29 新增 fastio
/*
* 空格作為分隔輸入,讀取一行的整數
*/gets(buf);
int v;
char *p = strtok(but, " ");
while (p)
輸入輸出掛 Uva11462 Age Sort
例題17 年齡排序 age sort,uva 11462 照從小到大的順序輸出。輸入格式 輸入包含多組測試資料。每組資料的第一行為整數n 0 n 2 000 000 即居民總數 下一行包含n個不小於1 不大於100的整數,即各居民的年齡。輸入結束標誌為n 0。輸入檔案約有25mb,而記憶體限制只有2...
hdu6178 bfs 輸入輸出掛
這道題是2017的多校第10場的1008.在一棵樹上選取最小的邊集使得有k個節點每個節點都和至少乙個其他節點相連線。了解二分匹配的話,很容易想到最優的情況肯定包含了最大二分匹配。而求一顆樹的最大二分匹配,並不需要什麼演算法,只要從葉子節點暴力 每個節點若它的父親不在點集內則將這條邊加入邊集 就可以,...
常用技巧 輸入輸出優化 輸入輸出外掛程式
我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...