最优解/cy
  • 板块P1469 找筷子
  • 楼主AuCloud
  • 当前回复8
  • 已保存回复8
  • 发布时间2020/12/29 12:36
  • 上次更新2023/11/5 05:32:58
查看原帖
最优解/cy
75954
AuCloud楼主2020/12/29 12:36
#include <cstdio>
const int L=1<<15;
char buffer[L],*S,*T;
inline char _getChar(){
    if(S==T){
        T=(S=buffer)+fread(buffer,1,L,stdin);
        if(S==T) return EOF;
    }
    return *S++;
}
void out(int x)
{
    if(x>9) out(x/10);
    putchar(x%10+'0');
}
int main()
{
	// out(111);
	register int n = 0, x = 0, s = 0;
	register char ch;
    for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
    while(ch>='0'&&ch<='9'){
        n=(n<<1)+(n<<3)+(ch-'0');
        ch=_getChar();
    }
	for(; n >= 16; n -= 16)
	{
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
	}
	while(n--)
	{
		for(ch=_getChar();ch<'0'||ch>'9';ch=_getChar());
	    while(ch>='0'&&ch<='9'){
	        x=(x<<1)+(x<<3)+(ch-'0');
	        ch=_getChar();
	    }
		s ^= x;
		x = 0;
	}
	out(s);
	return 0;
}

IO部分是原最优解的封装部分

对其进行循环展开和函数展开之后快了将近50ms

另:问一下,我尝试把_getChar()也进行函数展开的时候出了点问题,为什么在进入主函数之前足足运行了4s/yiw

我是在main()的第一行printf("qwq");,但是程序运行了4秒才输出qwq

求Debug:程序

2020/12/29 12:36
加载中...