Vijos P1554 硬币游戏(ZJOI2009)题解
2015-05-08 19:49
267 查看
从网上摘抄的代码,但研究了半天不知道原理,但仍在此放出,希望各位帮忙解释一下原理。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 100100 using namespace std; typedef long long ll; int n,tot;ll m; char a[2][M],ans[M<<1]; int main() { int x; cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d",&x),a[0][i]=x-1; for(ll j=2;j<=m;j<<=1) { if(m & j) { ++tot; for(int i=1;i<=n;i++) { int x=(i+(j>>1)%n+n-1)%n+1; int y=(i-(j>>1)%n+n-1)%n+1; a[tot&1][i]=a[~tot&1][x]^a[~tot&1][y]; } } } for(int i=1;i<=n;i++) ans[i+i-1]=a[tot&1][i]; if(m & 1) { for(int i=1;i<=n;i++) ans[i<<1]=ans[i+i-1]^ans[i==n?1:i<<1|1]; for(int i=1;i<=n;i++) ans[i+i-1]=-1; } else { for(int i=1;i<=n;i++) ans[i+i]=-1; } for(int i=1;i<=n<<1;i++) printf("%d%c",ans[i]+1,i==n+n?'\n':' '); }
相关文章推荐
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
- bzoj1411: [ZJOI2009]硬币游戏
- bzoj1411: [ZJOI2009]硬币游戏
- 1411: [ZJOI2009]硬币游戏【xjb找规律
- BZOJ 1411 ZJOI2009 硬币游戏 递推
- bzoj1411: [ZJOI2009]硬币游戏 找规律神题
- BZOJ 1411 ZJOI2009 硬币游戏
- vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏
- bzoj 1411 [ZJOI2009]硬币游戏
- bzoj 1411: [ZJOI2009]硬币游戏 找规律
- bzoj1411 [ZJOI2009]硬币游戏
- [ZJOI2009]硬币游戏
- bzoj1411: [ZJOI2009]硬币游戏
- ZJOI 2009 取石子游戏 博弈论
- [ZJOI2009]取石子游戏(Nim)
- 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)
- BZOJ 1434: [ZJOI2009]染色游戏
- [bzoj 2017] [Usaco2009 Nov]硬币游戏
- bzoj 2017: [Usaco2009 Nov]硬币游戏【dp】
- bzoj 1413 [ZJOI2009]取石子游戏 博弈论 dp