Codeforces 222B 数组行列交换操作

/*做完这题发现自己好水,太伤人了。。。。

不过还是学到一些,如果直接暴力模拟的话肯定是TLM。。

所以要用虚拟数组来分别保存当前数组的每行没列在初始数组中的位置。。。*/

 

#include<cstdio>
#include<algorithm>
using namespace std;
#define max 1000+5
int a[max][max];
int r[max],c[max];

int main()
{
    int n,m,k;
    while(~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]);
            }
            r[i]=i;
        }
        for(int j=1;j<=m;j++)
        {
            c[j]=j;
        }
        while(k--)
        {
            getchar();
            char cc;
            int x,y;
            scanf("%c %d %d",&cc,&x,&y);
            if(cc=='r')
            {
               swap(r[x],r[y]);
               //r[x]^=r[y];r[y]^=r[x];r[x]^=r[y];         //本来想用位操作提点速,泥煤,没想到反而慢了,不知为什么
            }
            else if(cc=='c')
            {
                swap(c[x],c[y]);
               //  c[x]^=c[y];c[y]^=c[x];c[x]^=c[y];
            }
            else
            {
                printf("%d\n",a[r[x]][c[y]]);
            }
        }
    }
}

 

 

posted on 2013-07-04 19:39  Stomach_ache  阅读(240)  评论(0编辑  收藏  举报

导航