#include<cstdio>
#include<iostream> #include<algorithm> #include<queue> using namespace std; int ans[2<<16]; int n; int vis[2<<16],sum=1; bool flag; int calc(int x) { int cnt=0; while(x) { if(x&1) cnt++; x=x>>1; } return cnt; } void dfs(int now,int step) { if(now==0&&step>1&&step<sum+1) //加个剪枝瞬间就过了 return; if(now==0&&step==sum+1){ flag=1; for(int i=1;i<=step;i++){ for(int j=1;j<=n;j++) if(ans[i]&(1<<(j-1)))printf("X"); else printf("O"); printf("\n"); } return; } if(step+calc(now)>sum+1) return; for(int i=1;i<=n;i++) { int nx=now^(1<<(i-1)); if(nx!=0&&vis[nx])continue; if(nx==0&&vis[nx]==1){ vis[nx]=2,ans[step+1]=nx; dfs(nx,step+1); ans[step+1]=0,vis[nx]=1; if(flag)return; } else if(nx!=0&&vis[nx]==0){ vis[nx]=1,ans[step+1]=nx; dfs(nx,step+1); ans[step+1]=0,vis[nx]=0; if(flag)return; } else continue; } } int main() { freopen("rocksa.in","r",stdin); freopen("rocksa.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++)sum=sum*2; ans[1]=0,vis[0]=1; dfs(0,1); return 0; } |
|
没有评测插件差评!cin这么慢!
题目 1448 [USACO Mar]石子游戏
2015-09-20 14:50:57
|
|
尼玛,正解就是暴力,想了半天该怎么写
|
|
评测插件呢==
题目 1448 [USACO Mar]石子游戏
2013-12-01 09:20:05
|
|
题目 1448 [USACO Mar]石子游戏
2013-11-30 20:27:27
|
|
|
|
哈哈哈。。dfs按字典序走,输出时按OOX这种走,谁知道是XOO,输出左右顺序一改就对了。。。
再顺便吐槽一下USACO练胆题系列
题目 1448 [USACO Mar]石子游戏
2013-11-30 19:51:11
|