题目背景

SOURCE:NOIP2016-RZZ-1

题目描述

给出两个 N×N 的矩阵 A、B,矩阵每行每列标号 0~N-1 。
定义这两个矩阵的乘积 AB 为

aaarticlea/png;base64,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" alt="" />

现在要在这两个矩阵上依次进行 Q 次修改操作,两种操作描述如下:

    • A i j K ,将 Ai,j 的值修改为 K 。
    • B i j K ,将 Bi,j 的值修改为 K 。

在每一次修改操作进行后,输出矩阵 AB(这两个矩阵的乘积矩阵)中每个位置元素的权值之和。

输入格式

第一行,一个正整数 N ,表示矩阵的大小。
接下来 N 行,每行 N 个整数,描述矩阵 A 。
接下来 N 行,每行 N 个整数,描述矩阵 B 。
接下来一行,一个正整数 Q ,表示操作次数。
接下来 Q 行,每行描述一个操作,格式如题面所示。

输出格式

输出 Q 行,每行一个整数,表示这次操作完成后的答案。

样例数据 1

输入

2 
1 2 
3 4 
4 3 
2 1 
3 
A 1 1 2 
B 0 1 3 
A 0 0 10

输出

40 
40 
103

备注

【数据规模与约定】

对于 10% 的数据,N = 1。对于 30% 的数据,N,Q≤10。对于 80% 的数据,1≤N≤100,|Ai,j|,|Bi,j|≤10。
对于 100% 的数据,1≤N≤1000,1≤Q≤105,|Aij|,|Bi,j|≤1000。

【题目分析】

 矩阵乘法的答案矩阵中的$(i, j)$为:矩阵$1$的第$i$行中的每个数$(i, k)$,乘上矩阵$2$中第j列的每一个数$(k, j)$

所以要求每次操作的答案,只需要记录一个$sum1[i]$表示矩阵$1$中第$i$列的和,和$sum2[i]$表示矩阵$2$中第$i$行的和,和$sum$表示答案矩阵的和。

修改矩阵$1$中的$(i, j)$时,$sum$只需加上$delta × sum2[i]$

修改矩阵$2$中的$(i, j)$时, $sum$只需加上$delta × sum1[j]$即可。

【CODE】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std; typedef long long ll;
const int N = ;
ll all, sum1[N], sum2[N];
int a[N][N], b[N][N];
int n, Q; inline int Re(){
int i = , f = ; char ch = getchar();
for(; (ch < '' || ch > '') && ch != '-'; ch = getchar());
if(ch == '-') f = -, ch = getchar();
for(; ch >= '' && ch <= ''; ch = getchar())
i = (i << ) + (i << ) + (ch - '');
return i * f;
} inline void Wr(ll x){
if(x < ) putchar('-'), x = -x;
if(x > ) Wr(x / );
putchar(x % + '');
} int main(){
// freopen("matrix.in", "r", stdin);
// freopen("matrix.out", "w", stdout);
n = Re();
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
a[i][j] = Re(),
sum1[j] += (ll)a[i][j];
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
b[i][j] = Re(),
sum2[i] += (ll)b[i][j],
all += 1LL * sum1[i] * b[i][j];
// for(int i = 1; i <= n; i++) cout<<sum1[i]<<" "<<sum2[i]<<endl;return 0;
Q = Re();
while(Q--){
char opt;
scanf("%c", &opt);
if(opt == 'A'){
int i = Re() + , j = Re() + , tmp = Re();
sum1[j] += (tmp - (a[i][j]));
all += 1LL * (tmp - (a[i][j])) * sum2[j];
a[i][j] = tmp;
}
else if(opt == 'B'){
int i = Re() + , j = Re() + , tmp = Re();
sum2[i] += (tmp - (b[i][j]));
all += 1LL * (tmp - (b[i][j])) * sum1[i];
b[i][j] = tmp;
}
Wr(all), putchar('\n');
}
return ;
}

【NOIP模拟】matrix(简化矩阵)的更多相关文章

  1. 2018.10.19 NOIP模拟 硬币(矩阵快速幂优化dp)

    传送门 不得不说神仙出题人DZYODZYODZYO出的题是真的妙. f[i][j][k]f[i][j][k]f[i][j][k]表示选的硬币最大面值为iii最小面值不小于jjj,总面值为kkk时的选法 ...

  2. 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)

    [输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...

  3. 8.5 NOIP模拟测试13 矩阵游戏+跳房子+优美序列

    T1矩阵游戏 数学题.首先这一列这一行先乘还是后乘对最后答案没有影响.a[i][j]表示矩阵中原始的值,h[i]表示i行的累乘,l[i]表示i列的累乘.易得ans=Σa[i][j]*h[i]*l[i] ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  6. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  7. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  8. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  9. 2014-10-31 NOIP模拟赛

        10.30 NOIp  模拟赛   时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...

  10. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

随机推荐

  1. Java 9 揭秘(3. 创建你的第一个模块)

    文 by / 林本托 Tips 做一个终身学习的人. 在这个章节中,主要介绍以下内容: 如何编写模块化的Java程序 如何编译模块化程序 如何将模块的项目打包成模块化的JAR文件 如何运行模块化程序 ...

  2. 做一枚精致的程序猿,Fighting!

    这几天我和我们的团队正在做一个公司管理系统的项目,团队分工根据成员的水平高低来分工,这样看似公平,但其实不公平,如此这样一来,那些水平稍不如别人的成员就没有发展的机会?那么问题来了,对于水平稍逊色的程 ...

  3. 9个常用iptables配置实例

    iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习ip ...

  4. github pages部署静态网页

    如果你的项目只是一个静态网站,就没有必要再去整什么服务器,github pages 提供了搭建静态网站的功能: 为什么使用Github Pages 1. 搭建简单而且免费: 2. 支持静态脚本: 3. ...

  5. Spring学习(7)--- @Required注解

    @Required注解是用于bean属性的setter方法 这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义胡通过自动装配一个明确的属性值 package com.mypa ...

  6. Nmap脚本文件分析(AMQP协议为例)

    Nmap脚本文件分析(AMQP协议为例) 一.介绍 上两篇文章 Nmap脚本引擎原理   编写自己的Nmap(NSE)脚本,分析了Nmap脚本引擎的执行过程,以及脚本文件的编写,这篇文章将以解析AMQ ...

  7. mac中使用 sourcetree 的快速配置和git服务器登录

    问题: 1.mac中下载sourcetree配置仓库地址,一直在提示输入密码,无法登录成功,更无法获取源码. 2.找不到配置仓库时的账号密码,只看到地址. 场景: git服务器:自己的GIT服务器,非 ...

  8. ubuntu eclipse 建立server 提示coud not load the tomcat server configuration at /opt/apache ...的解决方法

    ubuntu eclipse 建立server 提示coud not load the tomcat server configuration at /opt/apache ...的解决方法 & ...

  9. 10分钟轻松学会python turtle绘图

     1. 画布(canvas) 1.1 相关函数: 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘 ...

  10. thinkphp5.0学习笔记(四)数据库的操作

    ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理.采用PDO ...