【题解】Luogu P3480 [POI2009] KAM-Pebbles 阶梯Nim
你得先看懂题。。。好的我知道只有我没看懂
并不是把所有的数都去完为胜,而是要求每次取完都要满足a[i]≤a[i+1]的条件下,最后一个能取的人胜
对于
3 1 2 4
比如取2中的一个1
差分数组就由 1,2 变成了0,3
是不是相当于把第i项加到了第i+1项上
这东西有点眼熟,像不像阶梯nim,只是把i-1变成了i+1
所以我们就成功把这个问题转化为了,反着的阶梯nim游戏
倒着跑一遍就行了
code
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 const int mod=1e4; 5 const int maxn=1e6+10; 6 namespace gengyf{ 7 inline int read(){ 8 int x=0,f=1;char s=getchar(); 9 while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} 10 while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} 11 return f*x; 12 } 13 int n,a[maxn],x[maxn],ans,T; 14 int main(){ 15 T=read(); 16 while(T--){ 17 n=read();ans=0; 18 for(int i=1;i<=n;i++){ 19 a[i]=read(); 20 x[i]=a[i]-a[i-1]; 21 } 22 for(int i=n;i>=1;i-=2){ 23 ans^=x[i]; 24 } 25 if(ans)puts("TAK"); 26 else puts("NIE"); 27 } 28 return 0; 29 } 30 /* 31 aggressive 有进取心的 32 alert 机敏的 33 alliance 联盟 34 alter 修改 35 */ 36 } 37 signed main(){ 38 gengyf::main(); 39 return 0; 40 }