题意:给出n行m列的矩阵,有k次操作,有三种操作,(1).r操作:对第i行和第j行进行对换。(2).c操作:对dii列和第j列进行对换。(3)g操作:.输出当前矩阵中第i行第j列的数字
链接:http://codeforces.com/problemset/problem/222/B
思路:用两个数组分别维护交换的行号和列号
注意点:无
以下为AC代码:
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged |
---|---|---|---|---|---|---|---|---|
9709092 | Practice: luminous11 | 222B - 59 | GNU C++11 | Accepted | 902 ms | 3972 KB | 2015-02-04 08:55:22 | 2015-02-04 08:55:23 |
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define ll long long
#define ull unsigned long long
#define all(x) (x).begin(), (x).end()
#define clr(a, v) memset( a , v , sizeof(a) )
#define pb push_back
#define mp make_pair
#define read(f) freopen(f, "r", stdin)
#define write(f) freopen(f, "w", stdout)
using namespace std;
const double pi = acos(-1);
int num[1005][1005];
int row[1005];
int col[1005];
int main()
{
//ios::sync_with_stdio( false );
int m, n, k;
while ( scanf ( "%d%d%d", &n, &m, &k ) != EOF ){//cin >> n >> m >> k ){
for ( int i = 0; i < 1005; i ++ ){
row[i] = i;
col[i] = i;
}
for ( int i = 1; i <= n; i ++ ){
for ( int j = 1; j <= m; j ++ ){
scanf ( "%d", &num[i][j] );//cin >> num[i][j];
}
}
char ch;
int a, b;
for ( int i = 0; i < k; i ++ ){
getchar();//cin.ignore();
scanf ( "%c%d%d", &ch, &a, &b );//cin >> ch;
//cin >> a >> b;
if ( ch == 'g' ){
printf ( "%d\n", num[row[a]][col[b]] );//cout << num[row[a]][col[b]] << endl;
}
if ( ch == 'r' ){
swap ( row[a], row[b] );
}
if ( ch == 'c' ){
swap ( col[a], col[b] );
}
}
}
return 0;
}