Luogu P10102 [GDKOI2023 提高组] 矩阵 题解
模拟赛题,场切了,似乎做法和全世界都不一样。
直接暴力矩阵乘法显然过不去,也没有什么前途。注意到只需要判定是否相等,考虑矩阵每一行的和。假设现在正在计算第 \(i\) 项的和。
\]
交换枚举顺序,不难得到如下式子。
\]
我们发现,\(\sum_{j=1}^n B_{k,j}\) 其实就是 \(B\) 中第 \(k\) 行的数的和,预处理之后每一行就只需要枚举 \(k\) 就可以计算。总时间复杂度就达到了 \(O(n^2)\)。
我们判断算出来每行的和与 \(C\) 中每行的和是否相等即可。但是由于取模,有可能会出现冲突,所以我们再把每一列都判断一下。可以类比哈希,这么做出错概率极低。
#include <bits/stdc++.h>
using namespace std;
long long t,n,a[3001][3001],b[3001][3001],c[3001][3001],ha[3001],hb[3001],hc[3001],la[3001],lb[3001],lc[3001];
const long long mod=998244353;
inline long long read()
{
long long x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main()
{
scanf("%lld",&t);
while(t--)
{
n=read();
for(int i=1;i<=n;i++)ha[i]=hb[i]=hc[i]=la[i]=lb[i]=lc[i]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=read(),ha[i]=(ha[i]+a[i][j])%mod,la[j]=(la[j]+a[i][j])%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=read(),hb[i]=(hb[i]+b[i][j])%mod,lb[j]=(lb[j]+b[i][j])%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
c[i][j]=read(),hc[i]=(hc[i]+c[i][j])%mod,lc[j]=(lc[j]+c[i][j])%mod;
bool flag=0;
for(int i=1;i<=n;i++)
{
long long sum=0;
for(int k=1;k<=n;k++)sum=(sum+a[i][k]*hb[k]%mod)%mod;
if(sum!=hc[i])
{
flag=1;
break;
}
}
if(!flag)
for(int i=1;i<=n;i++)
{
long long sum=0;
for(int k=1;k<=n;k++)sum=(sum+b[k][i]*la[k]%mod)%mod;
if(sum!=lc[i])
{
flag=1;
break;
}
}
if(flag)printf("No\n");
else printf("Yes\n");
}
return 0;
}
Luogu P10102 [GDKOI2023 提高组] 矩阵 题解的更多相关文章
- 【题解】NOIP2017 提高组 简要题解
[题解]NOIP2017 提高组 简要题解 小凯的疑惑(数论) 不讲 时间复杂度 大力模拟 奶酪 并查集模板题 宝藏 最优解一定存在一种构造方法是按照深度一步步生成所有的联通性. 枚举一个根,随后设\ ...
- 【题解】NOIP2016 提高组 简要题解
[题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...
- Luogu P1314 [NOIP2011 提高组] 聪明的质监员
P1314 [NOIP2011 提高组] 聪明的质监员 题意 题目描述 给定\(n\)个物品,给定每个物品的 重量 \(w_i\) 和 价值 \(v_i\) 给定一个标准值 \(s\) 以及一个参数 ...
- 题解 【luogu P1541 NOIp提高组2010 乌龟棋】
题目链接 题解 题意: 有一些格子,每个格子有一定分数. 给你四种卡片,每次可以使用卡片来前进1或2或3或4个格子并拾取格子上的分数 每张卡片有数量限制.求最大分数. 分析 设\(dp[i]\)为第前 ...
- 题解 【luogu P2680 NOIp提高组2015 运输计划】
题目链接 题解 题意 一棵树上有\(m\)条路径,可以将其中一条边的权值改为0,问最长的路径最短是多少 分析 最短的路径最长自然想到二分最长路径,设其为\(dis\) 关键在于如何check chec ...
- NOIP2017提高组day2T1题解(奶酪)
题目链接:奶酪 这道题还是很水的,在下拿了满分. 并没有用什么高级的算法,我讲一下基本思路. 我们把每个洞都视为一个节点. 我们读入相关数据后,就先进行预处理,通过每个节点的信息和题目的规定,建立一张 ...
- Luogu P1023 [NOIp2000提高组]税收与补贴问题 | 数学
题目链接 思路:列不等式组,然后解出不等式,得出答案的取值范围,最后取一个绝对值最小的答案就行了. #include<iostream> #include<cstdio> #i ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
- P1005 [NOIP2007 提高组] 矩阵取数游戏
题目传送门 前言 今天依旧是不写高精的一天呢!(是的,这位作者又只拿了开 \(LL\) 的 \(\color{yellow}{60}\) 分) 思路描述 看到数据 \(n,m \le 80(30)\) ...
- nowcoder提高组2题解
T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...
随机推荐
- java中使用BigDecimal解决小数计算问题
1.示例 @Test public void test() { System.out.println(0.3 + 0.1); System.out.println(0.3 - 0.1); System ...
- 基于OpenCV与PyTorch的智能相册分类器全栈实现教程
引言:为什么需要智能相册分类器? 在数字影像爆炸的时代,每个人的相册都存储着数千张未整理的照片.手动分类不仅耗时,还容易遗漏重要瞬间.本文将手把手教你构建一个基于深度学习的智能相册分类系统,实现: 三 ...
- fiddler的composer设计器
1.过程:点击composer,把要修改请求体的会话拖到composer空白处,composer出现请求方式,url,请求报文,请求体 2.在请求体中修改请求内容(比如删除号码),然后点击excute ...
- PHP获取下个月今天时间
获取php下个月当前时间public static function fq_time($time = ""){ if (!$time) $time = time(); $arr = ...
- VBA_LoadPicture报错:子过程或子函数未定义
需要增加如下引用: While in the VBE select Tools>References>find and check "OLE Automation" 参 ...
- 2个小时1.5w字| React & Golang 全栈微服务实战
目录 前言 Golang 入门教程 1. 下载与环境配置 安装 Go Windows 安装 macOS 安装 Linux 安装 理解 GOROOT 和 GOPATH GOROOT GOPATH Go ...
- Data wrangling:Join,Combine,and Reshape,in Pandas
Data wrangling:Join,Combine,and Reshape,in Pandas import pandas as pd import numpy as np Hierarchica ...
- numpy.tile用法
先说下在numpy中,个人对array的维度的比较形象的理解: array的维度就是从最外边的[]出发(可理解为array的声明),一直找到具体数值而经过的[]的数量(含最后的数值,它是最后一维) 比 ...
- frp增加IP限制
核心设计理念 传统frp安全方案的不足 静态配置文件管理白名单IP,修改需要重启服务 分布式环境下多节点配置同步困难 缺乏实时阻断恶意IP的能力 Redis作为动态白名单存储的优势 实时生效:IP规则 ...
- DevOps 需要处理的工作
本文纯属个人工作记录: 1.部署Linux服务器 2.安装Docker 3.在Docker中安装Gitlab和runner 4.设置Gitlab pipline,即CI/CD 5.可能需要Jenkin ...