题目
试题编号 | 201703-2 |
---|---|
试题名称 | 学生排队 |
时间限制 | 1s |
内存限制 | 256MB |
问题描述 | ![]() |
输入输出 | ![]() |
解析
这个题随便模拟了,为什么要写这个题?混积分。
用一个数组a[i]表示编号为i的同学在的位置(从0算起);
用另一个数组b[i]表示第i个位置上是编号b[i]的同学;
AC程序
#include <iostream>
#include <stdio.h>
#include <vector>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
int a[1001];
int b[1001];
int main(){
int n,m;
scanf("%d%d",&n,&m);
int x,y;
rep(i,1,n+1){
a[i]=i-1;
b[i-1]=i;
}
while(m--){
scanf("%d%d",&x,&y);
if(y>=0){
int dir=a[x];
rep(i,dir,dir+y){
b[i]=b[i+1];
a[b[i]]=i;
}
b[dir+y]=x;
a[x]=dir+y;
}
else{
int dir=a[x];
for(int i=dir;i>dir+y;i--){
b[i]=b[i-1];
a[b[i]]=i;
}
b[dir+y]=x;
a[x]=dir+y;
}
}
rep(i,0,n)
printf("%d ",b[i]);
printf("\n");
return 0;
}