• 矩阵


    根据条件求任意子矩阵

    #include<stdio.h>
    #include<string.h>
    # define N 1100
    int a[N][N];
    typedef struct data
    {
        int x, y, da;
    }DATA;
    DATA d[30];
    void Start()
    {
        int i, j;
        for (i = 1; i < N; i++)
        {
            for (j = 1; j < N; j++)
                a[i][j] = a[i-1][j] + a[i][j-1] + i + j - a[i-1][j-1];
        }
    }  //把每一个从(1,1)开始的矩阵的元素和记录下来
    int main ()
    {
        Start();
        int T, n, m, k, K, i, p, q, r, s, sum, flag;
        char ch;
        scanf("%d", &T);
        while (T--)
        {
            K = 0;
            scanf("%d %d %d", &n, &m, &k);
            while (k--)
            {
                flag = 1;
                sum = 0;
                scanf(" %c %d %d %d", &ch, &p, &q, &r);
                if (ch == 'Q')
                {
                    scanf("%d", &s);
                    sum = a[r][s] - a[p-1][s] - a[r][q-1] + a[p-1][q-1];  //现将未改动的矩阵和求出
                    for (i = 0; i < K; i++)
                    {
                        if (d[i].x >= p && d[i].x <= r && d[i].y >= q && d[i].y <= s)  //查询该子矩阵中元素是否有改动
                        {
                            sum -= d[i].x;
                            sum -= d[i].y;
                            sum += d[i].da;
                        }  //若有改动则改变sum的值
                    } 
                    printf("%d ", sum);
                }
                else if (ch == 'M')
                {
                    for (i = 0; i < K; i++)
                    {
                        if (d[i].x == p && d[i].y == q)
                        {
                            flag = 0;
                            break;
                        }  //查询结构体中已有的元素中是否有此次输入的数据
                    }
                    if (flag == 1)
                    {
                        d[K].x = p;
                        d[K].y = q;
                        d[K].da = r;
                        K++;
                    }  //如果没有就将该数据加入结构体
                    else
                    {
                        d[i].x = p;
                        d[i].y = q;
                        d[i].da = r;
                    }  //如果有就将结构体相同位置的元素改成此次输入的数据
                }
            }
        }
        return 0;
    }

  • 相关阅读:
    java学习day35-三大框架-MyBatis(一)
    java学习day35-数据库事务
    java学习day34-Cookie和Session的区别
    java学习day34-Session技术
    Hadoop Java Versions
    如何下载和安装预构建的OpenJDK软件包
    How to install and configure samba on RHEL 8 / CentOS 8
    Win10系统下安装的Office版本的说明和注意事项
    Apache Hadoop
    nmap常用命令整理(长期更新)
  • 原文地址:https://www.cnblogs.com/syhandll/p/4444610.html
Copyright © 2020-2023  润新知