sdnuoj1208玉玉抓兔子(模拟)
SDNUOJ1208.玉玉抓兔子
Description
围绕着山顶有n个圆形排列的洞,玉玉要吃兔子,兔子说:“可以,但必须找到我,我就藏于这1..n个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但玉玉从早到晚找了m次,仍没有找到兔子.问:兔子究竟藏在那个洞里?请输出兔子可能存在的洞号。若兔子无处可藏,输出-1。
Input
两个数n(0<=n<=10^4),m(0<=m<=10^6)
Output
兔子可能存在的洞号,按字典序输出,两个洞之间用空格分隔
Sample Input
10 1000
Sample Output
2 4 7 9
一开始写的memset(b,1,sizeof(b));是错的,没有结果,后来改成了0.现在记住了!
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int b[10000+5];
int main()
{
int n,m,f,i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(b,0,sizeof(b));
j=1;k=1;
for(i=1; i<=m; i++)
{
if(i==1)
b[i]=1;
else
{
j++;
if(k+j>n)
{
k=(k+j-1)%n+1;
b[k]=1;
}
else
{
k+=j;
b[k]=1;
}
}
}
f=0;
for(i=1; i<=n; i++)
{
if(b[i]==0)
{
f=1;
cout<<i;
break;
}
}
if(f)
{
for(i=i+1; i<=n; i++)
{
if(b[i]==0)
cout<<" "<<i;
}
cout<<'\n';
}
else
cout<<"-1"<<'\n';
}
return 0;
}