cf 222b 【数组行列交换操作】.cpp

题意:

  给出n行m列的数组,并给出k个操作;

  其中操作方法有三种:

  ① c x y 表示把数组的第x列和第y列交换

  ② r x y 表示把数组的第x行和第y行交换

  ③ g x y 表示求数组的第x行第y列的数

 

思路:

  用一个数组c 和 r表示第c行和第r列当前值是实际数组中的第几行第几列

 

Tips:

  因为n m k给的值都很大

  所以如果按暴力模拟的话,即一个一个交换就会超时

  所以想到用一个虚拟的数组保存当前数组的每一行每一列在原数组中的哪一行哪一列

Code:

View Code
 1 #include <stdio.h>
 2 #include <cstring>
 3 #include <ctime>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 int arr[1010][1010];
 8 int main()
 9 {
10     int n, m, k;
11     int r[1010], c[1010];
12     int tx, ty;
13     char ord;
14     while(EOF != scanf("%d %d %d", &n, &m, &k)) {
15         for(int i = 1; i <= n; ++i) r[i] = i;
16         for(int i = 1; i <= m; ++i) c[i] = i;
17 
18         for(int i = 1; i <= n; ++i)
19             for(int j = 1; j <= m; ++j)
20                 scanf("%d", &arr[i][j]);
21         for(int i = 1; i <= k; ++i) {
22             scanf("%*c%c %d %d", &ord, &tx, &ty);
23             if(ord == 'c') {
24                 swap(c[tx], c[ty]);
25             } else if(ord == 'r') {
26                 swap(r[tx], r[ty]);
27             } else printf("%d\n", arr[r[tx]][c[ty]]);
28         }
29     }
30     return 0;
31 }

 

链接:http://www.codeforces.com/problemset/problem/222/B

转载于:https://www.cnblogs.com/Griselda/archive/2013/03/16/2963845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值