青岛建网站选青岛博采网络,wordpress建站 博客,小制作废品利用,网站服务公司哪个好题目描述
小明班上是n行m列的座位排列#xff0c;座位按照行列顺序编号#xff0c;如6行7列#xff0c;那么第1行第1列座位号为1号、第1行第7列为7号、第3行第4列为18号#xff0c;如此递推。
现在期中考刚结束要进行全班换座位。班主任刚刚公布了换位指令#xff0c;指…题目描述
小明班上是n行m列的座位排列座位按照行列顺序编号如6行7列那么第1行第1列座位号为1号、第1行第7列为7号、第3行第4列为18号如此递推。
现在期中考刚结束要进行全班换座位。班主任刚刚公布了换位指令指令一共z条且只有以下几类
①行对换
②列对换。
请你根据换位指令找到换位结束后第x行第y列的原座位号。
输入格式
第一行为三个整数分别为n、m、z以空格隔开整数含义如题所示。
第二至z1行有三个整数分别为a、b、c。若a为1则将bc行对换若a为2则将bc列对换。
最后一行有两个整数分别为x和y整数含义如题所示。
输出格式
输出1行输出第x行第y列的原座位号。 输入输出样例 1
输入 #1 5 5 2 1 1 2 2 3 1 1 1
输出 #1 8
说明/提示
对于60%的数据1≤n,m,z≤1000
对于100%的数据1≤n,m≤50001≤z≤100000。 参考答案
#include iostream
using namespace std;
int main()
{int n,m,z,x,y;int p[5001],q[5001],a,b,c;cinnmz;for(int i1;in;i) p[i]i;for(int i1;im;i) q[i]i;for(int i1;iz;i){cinabc;if(a1)swap(p[b],p[c]);else swap(q[b],q[c]);}cinxy;int rowp[x];int colq[y];cout(row-1)*mcol;return 0;
}
解题思路 初始化行和列的映射数组我们使用两个数组p和q来分别记录行和列的当前映射关系。初始时p[i] i表示第i行当前还是原来的第i行q[j] j表示第j列当前还是原来的第j列。 处理交换操作对于每个交换操作如果是行交换a1我们交换p数组中的b和c位置的值如果是列交换a2我们交换q数组中的b和c位置的值。 查询最终座位号根据处理后的p和q数组找到第x行和第y列对应的原始行和列。原始座位号的计算公式为 (原始行-1)*m原始列 其中m是列数。 (直接用二维数组模拟会超时)