DAY2 - T1 银河战队
T1:银河战队
题目
题目描述
章北蚤想创建一只银河战队,他对跳蚤进行方阵训练。 有一个 n 行 m 列的方阵,每个位置有一只跳蚤。
i 行 j 列的跳蚤原始序号为(i-1)*m+j
章北蚤共有 q 次指令。
章北蚤每次会报一个位置,x 行 y 列(x,y)
1. 该跳蚤出列,输出该序号
2. x 行他右侧的跳蚤左移,空出最后一个位置
3. m 列 x 行后面的跳蚤向上移,空出(n,m)
4. 出列的跳蚤站进(n,m)
输入
输入文件为 army.in。 第一行包含用空格隔开的三个整数 n,m,q 接下来 q 行每行两个数 x,y
输出
输出文件为 army.out。
共n行
每行一个序号
样例
2 2 3
1 1
2 2
1 2
1
1
4
数据
对于前 40%的数据,满足 n=1
对于 100%的数据,满足 n,m<=1000,q<=500
题解
模拟
#include <bits/stdc++.h>
using namespace std;
int n, m, q, mp[1010][1010], a[1010], tot;
int main(){
scanf("%d%d%d", &n, &m, &q);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
mp[i][j] = (i - 1) * m + j;
}
}
int x, y;
while(q--){
scanf("%d%d", &x, &y);
a[++tot] = mp[x][y];
int k = mp[x][y];
mp[x][y] = 0;
for(int i = y+1; i <= m; i++){
mp[x][i-1] = mp[x][i];
}
mp[x][m] = 0;
for(int i = x+1; i <= n; i++){
mp[i-1][m] = mp[i][m];
}
mp[n][m] = k;
}
for(int i = 1; i <= tot; i++){
printf("%d\n", a[i]);
}
return 0;
}
//补上一个 check() 随时检查
void check(){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cout << mp[i][j] << " ";
}
cout << endl;
}
return ;
}
加强补充
题目
没有未来的未来不是我想要的未来

浙公网安备 33010602011771号