比赛 |
20131130 |
评测结果 |
WAWWWWWTTT |
题目名称 |
石子游戏 |
最终得分 |
10 |
用户昵称 |
明天 |
运行时间 |
3.002 s |
代码语言 |
C++ |
内存使用 |
0.54 MiB |
提交时间 |
2015-09-19 20:58:18 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=15+1;
int n;
bool used[40000],f[40000];
int x,y;
int a[40000],len;
int s;
bool flag=false;
void dfs(int k,int x);
void print();
void shuchu(int x,int n);
int main()
{
freopen("rocksa.in","r",stdin);
freopen("rocksa.out","w",stdout);
cin>>n;
f[1]=true;
for (int i=2; i<40000; i*=2)
{
f[i]=true;
}
s=1;
for (int i=1; i<=n; i++)
s=s<<1;
shuchu(0,n); cout<<endl;
dfs(1,0);
shuchu(0,n); cout<<endl;
return 0;
}
void dfs(int k,int x)
{
if (flag) return;
if (k>s-1)
{
flag=true;
print();
return;
}
for (int i=1; i<=s; i++)
{
if (!used[i] && f[i^x])
{
used[i]=true;
a[len]=i; len++;
dfs(k+1,i);
len--; used[i]=false;
}
}
}
void print()
{
for (int i=0; i<len; i++)
{
shuchu(a[i],n); cout<<endl;
}
}
void shuchu(int x,int n)
{
if (n==1)
{
if (x==1) cout<<'X';
else cout<<'O';
return;
}
shuchu(x/2,n-1);
if (x%2==1) cout<<'X';
else cout<<'O';
}