题目链接:https://vjudge.net/contest/209687#problem/G
题意描述:给n*m的矩阵,有k条命令:
c i j,交换第i和j列;
r i j,交换第i和j行;
g i j,输出a[i][j];
数据范围:(1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 500000)
解题思路:数据范围过大用cin,cout输入输出会t。。。。
用两个一位数组单独直接表示行和列,交换行或者列直接交换数组里的下标即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1005][1005];
int r[1005],c[1005];
int n,m,k,x,y;
char ch;
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++) r[i]=i;
for(int j=1;j<=m;j++) c[j]=j;
while(k--)
{ getchar();
scanf("%c%d%d",&ch,&x,&y);
if(ch=='c') swap(c[x],c[y]);
if(ch=='r') swap(r[x],r[y]);
if(ch=='g') printf("%d\n",a[r[x]][c[y]]);
}
return 0;
}