题目 http://ac.jobdu.com/problem.php?pid=1477
#include<stdio.h>
void move(int n,int x,int a[],int b[]){
int pos=0,i;
if(x<=n/2){
for(i=n/2+x;i>=x+1;i--)
b[++pos]=a[i];
for(i=n/2+x+1;i<=n;i++)
b[++pos]=a[i];
for(i=1;i<=x;i++)
b[++pos]=a[i];
}
else{
for(i=n/2-n+x;i>=1;i--)
b[++pos]=a[i];
for(i=n;i>=x+1;i--)
b[++pos]=a[i];
for(i=n/2-n+x+1;i<=x;i++)
b[++pos]=a[i];
}
}
int main(){
int n,k,x,i;
int a[1005],b[1005];
while(scanf("%d%d",&n,&k)&&n!=0){
for(i=1;i<=1000;i++) a[i]=i;
bool flag=true;
while(k--){
scanf("%d",&x);
if(flag) move(n,x,a,b);
else move(n,x,b,a);
flag=!flag;
}
if(flag)
for(i=1;i<=n;i++)
printf("%d ",a[i]);
else
for(i=1;i<=n;i++)
printf("%d ",b[i]);
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1477
Language: C++
Result: Accepted
Time:10 ms
Memory:1020 kb
****************************************************************/