题目链接:http://codeforces.com/contest/792/problem/B
题意:n个小孩顺时针从1开始计数排列成一圈,他们玩k次counting-out游戏,每次leader(初始为1)从他的下一位开始数a[i]下,第a[i]个出局,第a[i]+1个成为新的leader,问每次出局的人的编号。
解题方案:模拟,复杂度O(n*n)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define FOR(i,k,n) for(int i=k;i<n;i++)
#define FORR(i,k,n) for(int i=k;i<=n;i++)
#define scan(a) scanf("%d",&a)
#define scann(a,b) scanf("%d%d",&a,&b)
#define scannn(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define mst(a,n) memset(a,n,sizeof(a))
#define ll long long
#define N 105
#define mod 1000000007
#define INF 0x3f3f3f3f
const double eps=1e-8;
const double pi=acos(-1.0);
int a[N];
int vis[N],ans[N];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,k,tot=0;
scann(n,k);
FOR(i,0,k) scan(a[i]);
int leader=0;
FOR(i,0,k)
{
int cnt=0,tmp=(leader+1)%n;
a[i]%=n-i;
while(cnt<a[i])
{
if(!vis[tmp])
{
cnt++;
}
tmp++; tmp%=n;
}
//printf("tmp=%d\n",tmp);
vis[tmp==0?n-1:tmp-1]=1; //WA1: vis[(tmp-1)%n]=1;
ans[tot++]=(tmp==0?n:tmp);
while(vis[tmp]) tmp++,tmp%=n;//WA2: 没加这条语句
leader=tmp;
}
FOR(i,0,tot-1) printf("%d ",ans[i]);
printf("%d\n",ans[tot-1]);
return 0;
}