我在CSP-S中使用了以下诡异读入:
inline void read(){}
template<class T1,class...T2>
inline void read(T1&ret,T2...rest){
ret=0;char ch=getchar();bool f=false;
while(ch<'0'&&ch>'9')f=ch=='-',ch=getchar();//注意到这里挂了
while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
if(f)ret=-ret;
read(rest...);
}
inline void read(string&ret){
ret.clear();char ch=getchar();
while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();
while(!(ch==' '||ch=='\n'||ch=='\r'))ret+=ch,ch=getchar();//注意到没判EOF
}
#define cin(...) read(__VA_ARGS__)
上面那个会导致死于多余空格,包括行末空格,但是我相信CCF不会在这里搞事情。
下面那个会导致,如果读入的字符串是在输入文件末尾,没有多余空格和换行,则读到EOF时!(ch==' '||ch=='\n'||ch=='\r')也不会被满足,ch=getchar()将无限等待下去导致TLE。
注意到S T2完美满足这一条件。
然后我本地Windows下,打开文件读写,使用第二个读入读字符串因为未知原因可以读入/jy
洛谷在线IDE上则会TLE,并且部分民间数据(洛谷的部分数据)会TLE,部分民间数据(云斗,小图灵,核OJ,洛谷的另一部分数据)不会,猜测是文末回车等等导致的。
但是这些地方有的要求文件读写有的不要求。
所以希望来个能用NOI Linux的人测一下,悬一关,先到先得。