1)只交换行或列的标号。
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
//int x[110][110];
//int y[110][110];
int x_bian[110];
int y_bian[110];
int matrix[110][110];
struct Node{
int one,sec;
string name;
}node[20010];
int main()
{
int n,k;
cin>>n;
cin>>k;
int g;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>matrix[i][j];
//x[i][j]=matrix[i][j];
}
}
//cout<<"1111"<<endl;
for(int i=1;i<=n;i++){
x_bian[i]=i;
y_bian[i]=i;
}
string name;
int xx;
int yy;
int endd=-1;
for(int i=0;i<k;i++){
cin>>node[i].name>>node[i].one>>node[i].sec;
if(node[i].name=="Ask") endd=i;
}
for(int i=0;i<k;i++){
if(node[i].name=="Ask"){
cout<<matrix[x_bian[node[i].one]][y_bian[node[i].sec]];
if(i!=endd){
cout<<endl;
}
}
else if(node[i].name=="swapR"){
int x_temp=x_bian[node[i].one];
int x_temp2=x_bian[node[i].sec];
x_bian[node[i].one]=x_temp2;
x_bian[node[i].sec]=x_temp;
}
else if(node[i].name=="swapC"){
int y_temp=y_bian[node[i].one];
int y_temp2=y_bian[node[i].sec];
y_bian[node[i].one]=y_temp2;
y_bian[node[i].sec]=y_temp;
}
//if(i==k-1){
//cout<<endl;
//}
}
return 0;
}
2)
Description
给定一个N*N的矩阵,支持3种操作:
swapR a b:交换第a行和第b行的所有元素;
swapC a b:交换第a列和第b列的所有元素;
Ask a b:询问第a行第b列元素的值
Input
第一行N,K,为矩阵大小和操作个数
接下来N行每行N个正整数代表矩阵元素
接下来K行每行一个操作,格式如题目所述。
1 <= N <= 100; 1 <= K <= 20000;
Output
对于每个询问,输出一行作为答案。
Sample Input
2 30 12 3Ask 2 2swapR 1 2Ask 1 1
Sample Output
32