因为我是彩笔,所以我这个是暴力办法,仅供思路参考,不可ac!!!仅30分,请勿直接投递
使用二维数组模拟队列,用for循环实现模拟教官喊口号队列的移动,因为人太多教官也管不过来,加上二维数组开太大直接原地起飞,所以最多最多教官喊得动15500*15500的人(不是上限不过差不多,16000*16000就炸了)so我数组开个15509*15509没问题吧?
然后是模拟队伍看齐,我用两个for循环分别实现队伍成员的转移,就这么简单
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long n,m;
long long sb[15509][15509];
long long tempnum,tempx,tempy;
void move(){
//向左看齐
for(ll j=tempy;j<=m;j++){
ll i=tempx;
if(j==m)sb[i][j]=-1;
else sb[i][j]=sb[i][j+1];
}
/* 向钱看齐
for($$$ $=$$$$$;$<=$;$+++++++++++)
$$$++;
*/
//向前看
for(ll i=tempx;i<=n;i++){
ll j=m;
if(i==n)sb[i][j]=-1;
else sb[i][j]=sb[i+1][j];
}
//归队
sb[n][m]=tempnum;
return;
}
int main(){
// freopen("phalanx.in","r",stdin);
// freopen("phalanx.out","w",stdout);
ll q;
scanf("%d%d%d",&n,&m,&q);
long long num=1;
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
sb[i][j]=num++;
while(q--){
scanf("%d%d",&tempx,&tempy);
tempnum=sb[tempx][tempy];
cout<<tempnum<<endl;
move();
// 测试用for
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++){
// cout<<sb[i][j]<<" ";
// }
// cout<<endl;
// }
// cout<<endl;
}
return 0;
}
/*
__
|#|
|#|
|#|
|#|
|#|_______
|########|
[L]
*/
结束了……下次更长些!