题目大意是说有n个人玩k张牌,其中牌中有k/n张GOOD牌,Bessie想的到所有的GOOD牌,但她的朋友给出了一些限制
1、发牌要从Bessie上家开始(也就是说Bessie是第n个人发牌)
2、每次发牌后将接下来的p张牌放到牌的最下面
题目要求找出GOOD牌所放的位置,要从小到大
这个题类似约瑟夫环问题,直接模拟就好。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int n,k,p,ans[maxn];
bool vis[maxn];
int GetNext(int st)
{
int count=0,now=st;
while(1)
{
if(!vis[now])
{
count++;
if(count==p+1)
return now;
}
now++;
if(now>k)
now=1;
}
}
int main()
{
while(scanf("%d%d%d",&n,&k,&p)!=EOF)
{
memset(vis,0,sizeof(vis));
int cur=0,now=1;
for(int i=1;i<k;i++)
{
vis[now]=1;
if(i%n==0)
ans[cur++]=now;
now=GetNext(now);
}
ans[cur++]=now;
sort(ans,ans+cur);
for(int i=0;i<cur;i++)
printf("%d\n",ans[i]);
}
return 0;
}