传送门
题解:
首先答案只可能是 0 , 1 , 2 0,1,2 0,1,2,原序列我们也以 0 , 1 , 2 0,1,2 0,1,2 来考虑。
直接利用 L u c a s Lucas Lucas 定理可以算出答案是奇数还是偶数,如果是奇数,那肯定是 1 1 1。
否则如果原序列有 1 1 1,答案不可能是 2 2 2,证明只提一点,不多赘述:在序列变为全 0 0 0 之前,会一直有至少一个位置是 1 1 1 。
否则原序列是 0 , 2 0,2 0,2 构成,转成 0 , 1 0,1 0,1 序列然后用 L u c a s Lucas Lucas 定理算一下答案奇偶性即可。
代码:
#include<bits/stdc++.h>
#define ll long long
#define re register
#define cs const
using std::cerr;
using std::cout;
cs int N=1e6+7;
int n,c1;
int ans;
char s[N];
void Main(){
scanf("%d%s",&n,s+1);
for(int re i=1;i<=n;++i)s[i]-=49;
for(int re i=1;i<=n;++i)
if(s[i]==1){
c1=true;
ans^=((n-1)^(i-1)^(n-i))==0;
}
if(ans)cout<<1<<"\n";
else if(c1)cout<<0<<"\n";
else {
ans=0;
for(int re i=1;i<=n;++i)
if(s[i]==2)ans^=((n-1)^(i-1)^(n-i))==0;
cout<<(ans*2)<<"\n";
}
}
inline void file(){
#ifdef zxyoi
freopen("B.in","r",stdin);
#endif
}signed main(){file();Main();return 0;}