比赛 |
20110729 |
评测结果 |
AATTTTTTTT |
题目名称 |
01环 |
最终得分 |
20 |
用户昵称 |
苏轼 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-07-29 11:39:48 |
显示代码纯文本
#include <cstdio>
#include <set>
using namespace std;
int N,K,re;
bool check(const int &p)
{
if (p==0)
return false;
int j=0;
for(int i=0;i<N;i++)
if (p&(1<<i))
j=0;
else
{
j++;
if (j>K)
return false;
}
for(int i=0;i<N;i++)
if (p&(1<<i))
break;
else
{
j++;
if (j>K)
return false;
}
return true;
}
set<int> hash;
int main()
{
freopen("01ring.in","r",stdin);
freopen("01ring.out","w",stdout);
int T,MO;
scanf("%d%d",&T,&MO);
while(T--)
{
scanf("%d%d",&N,&K);
if (K==0)
{
printf("1\n");
continue;
}
hash.clear();
re=0;
for(int i=0;i<(1<<N);i++)
if (K>=N || check(i))
{
int small=i,k=i;
for(int j=1;j<N;j++)
{
k=(k>>1)+((k&1)<<(N-1));
if (k<small)
small=k;
}
if (!hash.count(small))
{
re++;
hash.insert(small);
}
}
printf("%d\n",re);
}
}