记录编号 | 187669 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [USACO Mar]石子游戏 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.016 s | ||
提交时间 | 2015-09-20 00:50:04 | 内存使用 | 0.31 MiB | ||
#include<cstdio> #include<deque> #include<iostream> using namespace std; const int SIZEN=(1<<15)+10; bool s[SIZEN]={0}; int N,endstep; deque<int> ans; int get(int temp,int i) { return temp&(1<<(N-i)); } int changedig(int temp,int i,int t) { return temp^(1<<(N-i)); } void printans() { for(int i=0;i<ans.size();i++) { for(int j=1;j<=N;j++) { int temp=get(ans[i],j); if(temp==0) printf("O"); else printf("X"); } printf("\n"); } } bool dfs(int x,int y) { if(y==endstep) { printans(); return 1; } int temp=x; for(int i=1;i<=N;i++) { if(get(x,i)) temp=changedig(x,i,0); else temp=changedig(x,i,1); if(temp&&s[temp]) continue; if(!temp&&y<endstep-1&&s[temp]) continue; ans.push_back(temp); s[temp]=1; if(dfs(temp,y+1)) return 1; ans.pop_back(); s[temp]=0; } return 0; } int main() { freopen("rocksa.in","r",stdin); freopen("rocksa.out","w",stdout); scanf("%d",&N); endstep=1<<N; ans.push_back(0); s[0]=1; dfs(0,0); return 0; }