矩阵模拟——空间换时间

hud5671;模拟题;
http://acm.hdu.edu.cn/showproblem.php?pid=5671
题目大意;输入一个矩阵的行列和要执行操作的步数;
有四种操作;
1 x y;就是把x,y行进行交换;
2 x y;就是把x,y列进行交换;
3 x y;就是把x行的所有元素都加y;
4 x y;就是把x列的所有元素都加y;

应该是道很水的模拟题;但是一提交直接超时;搞了大半天才知道不能用常规方法做 ;
竟然用空间换时间的方法;
直接贴代码;

#include<stdio.h>
int s[1005][1005],h[1005],l[1005];
//h表示行的交换,l表示列的交换;
int main()
{
    int t, t1,i, j, k, n, m,q,x,y,o;
    scanf("%d",&t1);
    while(t1--)
    {
        //printf("hhuii\n");
        int x1[1005]={0},x2[1005]={0};//控制元素加减的;x1表示每行的加减,x2表示每列的加减
        scanf("%d %d %d",&n,&m, &q);
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++)
                scanf("%d",&s[i][j]);
        for(i = 1; i <= n; i++)//对应的行的下标
            h[i] = i;
        for(i = 1; i <= m; i++)
            l[i] = i;
        while(q--)
        {
            scanf("%d %d %d",&k,&x,&y);
            if(k == 1)
            {
                t = h[x];
                h[x] = h[y];
                h[y] = t;
            }
            if(k == 2)
            {
                t = l[x];
                l[x] = l[y];
                l[y] = t;
            }
            if(k == 3)
            {
                x1[h[x]] += y;
            }
            if(k == 4)
            {
                x2[l[x]] += y;
            }
        }
        for(i = 1; i <= n; i++)
        {
            for(j = 1; j < m; j++)
            {
                printf("%d ",s[h[i]][l[j]]+x1[h[i]]+x2[l[j]]);
            }
            printf("%d",s[h[i]][l[m]]+x1[h[i]]+x2[l[m]]);
            printf("\n");
        }
    }

    return 0 ;
}

特别注意这题很容易超时的;输出的时候如果加if来判断输出空格那也会超时的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值