[HNOI2001] 矩阵乘积

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

一道上古时代的题
在这里插入图片描述

这道题看上去很简单,一个矩阵乘法的板子题
但是
数据范围N≤6000N\leq6000N≤6000,那么时间复杂度O(N3)O(N^3)O(N3),空间复杂度O(N2)O(N^2)O(N2)都炸了,所以我们要进一步考虑
我们发现
他只询问一个位置的数
所以
我们就可以只存答案那一行,而且,答案只和那一行(或者那一列有关)
切了!said gjm(sto gjm)
别急,这道题读入还极其的恶心,他是一个一个点给出的,考验编程技巧的时刻到了
我们可以

    for(;;){
        fgets(input,10000,stdin);
        if(!isdigit(input[0]))break;
        sscanf(input,"%d%d%d",&u,&v,&val);
        if(u==x)Am[v]=val;
    }
    for(;;){
        fgets(input,10000,stdin);
        if(!isdigit(input[0]))break;
        sscanf(input,"%d%d%d",&u,&v,&val);
        Bm[v]+=Am[u]*val;
    }
    memcpy(Am,Bm,sizeof(Bm));
    memset(Bm,0,sizeof(Bm));
    while(~scanf("%d%d%d",&u,&v,&val))
        Bm[v]+=Am[u]*val;

这样,运用到一些只有akioiakioiakioi的gjmgjmgjm,xycxycxyc,lpllpllpl等人才会用的别人根本看不懂的函数
不会读入技巧怎么办
别急,题目里给出了一条线索,每一个矩阵里的点给出的顺序都是从小到大排好序的,我们可以开一个变量存储
上一个读进来的是什么
如果这个点比上一个小,那么一定是新开了一个矩阵
所以
代码奉上

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <stack>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;
const int N=6005;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

int x,y;
int a,b,c,d;
int one[N],two[N],three[N];

int main()
{
	read(x),read(y);
	read(a),read(b),read(c),read(d);
	int xx,yy,zz,xxx=0,yyy=0,zzz=0;
	read(xx),read(yy),read(zz);
	while(1){
		if(xx==x)one[yy]=zz;
		xxx=xx,yyy=yy,zzz=zz;
		read(xx),read(yy),read(zz);
		if(xx<xxx||(xx==xxx&&yy<yyy))break;
	}
	while(1){
		two[yy]+=one[xx]*zz;
		xxx=xx,yyy=yy,zzz=zz;
		read(xx),read(yy),read(zz);
		if(xx<xxx||(xx==xxx&&yy<yyy))break;
	}
	three[yy]+=two[xx]*zz;
	while(~scanf("%d%d%d",&xx,&yy,&zz))three[yy]+=two[xx]*zz;
	printf("%d\n",three[y]);
	return 0;
}

但是
交到luoguluoguluogu上,我们发现T了一个点
why?
我们猜想,是因为有一个矩阵是空的!但我们这种读入方法提前把下一个数读进来了,但是因为 没有下一个数,所以我们
愉快的挂掉了
解决方案?
我们只需要改成这个亚子

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <stack>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;
const int N=6005;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

int x,y;
int a,b,c,d;
int one[N],two[N],three[N];

int main()
{
	read(x),read(y);
	read(a),read(b),read(c),read(d);
	int xx,yy,zz,xxx=0,yyy=0,zzz=0;
	read(xx),read(yy),read(zz);
	while(1){
		if(xx==x)one[yy]=zz;
		xxx=xx,yyy=yy,zzz=zz;
		if(scanf("%d%d%d",&xx,&yy,&zz)==-1)break;//here
		if(xx<xxx||(xx==xxx&&yy<yyy))break;
	}
	while(1){
		two[yy]+=one[xx]*zz;
		xxx=xx,yyy=yy,zzz=zz;
		if(scanf("%d%d%d",&xx,&yy,&zz)==-1)break;//here
		if(xx<xxx||(xx==xxx&&yy<yyy))break;
	}
	three[yy]+=two[xx]*zz;
	while(~scanf("%d%d%d",&xx,&yy,&zz))three[yy]+=two[xx]*zz;
	printf("%d\n",three[y]);
	return 0;
}

为什么可以呢
因为如果没有下一个,就直接跳出,问题就解决了
时间复杂度
O(?)O(?)O(?),比N2N^2N2小
空间复杂度
O(N)O(N)O(N)

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR) 简单介绍了X-BAR。 阅读详情

相关推荐

Avellaneda & Stoikov’s market-making strategy 工程化处理

前2篇文章详细介绍了AS存货模型的做市策略,这次对于这些公式里面一些希腊字母的取值是如何计算的,如何做工程化并应用到生产环境中做一些说明。这个里面有一些重要参数:很直观,可以直接取值的有:s = current market mid price (中间价,也就是【最佳卖价+最佳买价】/2)q = quantity of assets in inventory of base asset (也就是买入多少价值的股票数量)

weixin_42480337的博客 7067

[HNOI 2001]矩阵乘积

Description Input Output Sample Input 1 2 3 4 2 3 1 1 3 1 4 5 2 2 1 3 1 2 1 2 2 2 1 1 3 1 2 3 2 4 1 2 2 1 3 3 2 1 1 2 2 2 Sample Output 12 题解 直接...

weixin_30457465的博客 140

Aurix TC387 Ethernet代码解析之二_移植

英飞凌官方仅提供了TC397的例程,故需通过TC397例程来移植到TC387新建工程里。TC397官方例程名称【Ethernet_1_KIT_TC397_TFT】,网络上可以免费获取到,此处不赘述。使用工具【

m0_69929716的博客 884

矩阵乘积

输入一个 m*n的矩阵 和一个n*p的矩阵,要求打印出两个矩阵的乘积。代码如下: public class Test { public static void main(String[] args) { System.out.println("请输入m行n列以及n行p列的矩阵:"); Scanner sc=new Scanner(System.in);

resulet的博客 1077

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1447

Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络

所提出的Mamba-UNet的架构如图2所示,其灵感来源于UNet [24] 和 Swin-UNet [3]。首先将大小为 H × W × 1 的2D灰度图像分割成类似于ViT和VMamba的块 [5,16],然后转换为维度为 H/4 × W/4 × 16 的1D序列。一个初始的线性嵌入层将特征维度调整为任意大小C。这些块令牌随后通过多个VSS块和块合并层进行处理,以创建分层特征。块合并层负责下采样和维度增加,而VSS块则专注于学习特征表示。

AI浩 7548

[HNOI2001]矩阵乘积

题目描述 输入输出格式 输入格式: 第1行为:x y (第1行为两个正整数:x,y分别表示输出结果所在的行和列) 第2行为:m n o p(第2行给出的正整数表明A为m×n矩阵,B为n×o矩阵,C为o×p矩阵) 第3行为:i j a(第3行以后的每一行有三个整数分别是矩阵的三元组表示法中的一个元素的值,每个矩阵之间有一个空行。表示的顺序是矩阵A、B和C) … … … … …...

SSL_Yyx的博客 436

Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps等链接。需要你使用python自动将页面上含有的这些信息链接下载并保存到指定文件夹。遇到这种情况需要怎么做呢?别担心,跟着笔者直接往下看正文的详细解决方法。(附完整代码)在有些网页的正文中,有时会有如下图中的doc链接。比如爬虫在采集正文数据的时候,像标题,正文内容,作者,发布时间等等

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 4145

1221: [HNOI2001] 软件开发

最小费用最大流。 建图:拆点,每个点拆成入点和出点。 显然,要满足每天的餐巾供应,于是有附加源汇ST,S向入点引一条容量为ni,费用为0的边,出点向T引一条容量为ni,费用为0的边。 若满足题目要求,这必有所有出点到T的弧满载,为了保证这一点,由S向出点引容量为无穷,费用为f的边。 又因为每天没用完的餐巾可以留到下一天,所以每天的入点向下一天的入点引流量为无穷,费用为0的边。 又由题目的

月下沙茶树 622

uniapp - 实现 App 端 “半屏幕“ 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程

uniapp app端实现半屏幕扫码,uniapp 扫一扫半个屏幕,uniapp 扫一扫,uniapp持续扫码实现,uniapp怎么自定义扫码和连续扫码,uni-app App端半屏连续扫码,uniapp 扫一扫半个屏幕,uniapp自定义扫码页面样式,实现连续扫码功能(uniapp),uniapp - 实现 App 端 "半屏幕" 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程。

✅ 精选推荐文章 1万+

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722

打卡信奥刷题(2568)用C++实现信奥 P2222 [HNOI2001] 矩阵乘积

本文介绍了一个稀疏矩阵乘积问题,要求计算三个矩阵A、B、C的乘积D=A×B×C,并输出D矩阵指定位置(x,y)的值。题目采用三元组表示稀疏矩阵,仅存储非零元素。文章给出了输入输出样例和C++实现代码,该代码通过优化计算过程,仅计算目标位置相关的元素乘积,避免了完整矩阵乘法的计算。数据规模为矩阵维度≤6000,非零元素总数≤6000。该算法适用于处理大规模稀疏矩阵的乘积问题。

Loge谈信奥--一个专注于信奥人的博客 1222

【LLM】大模型幻觉问题的原因和缓解方法

一、幻觉定义 备注(下面提及的两个名词): Faithfulness:是否遵循input content; Factualness:是否符合世界知识; 传统nlp任务重,幻觉大多数是faithfulness,比如Intrinsic Hallucination(冲突),摘要内容和document内容有冲突;再比如Extrinsic Hallucination(无中生有),生成内容中包含input要求的其他杂七杂八虚假信息;但LLM应该考虑的幻觉Factualness,因为数据源是Open-doman的世界知

发现问题,并解决问题,批判性思维 1万+

[BZOJ]2326: [HNOI2011]数学作业 矩阵乘法

题解: 矩阵乘法直接搞,注意不同位数的时候需要分段,改一改矩阵中的一个数就好了,也不是很难搞,顺便存一下模板,虽然写得又丑又垃圾,不过至少我自己还是看得懂的…… 代码: #include #include #include #include using namespace std; #define LL long long LL n,mod=9999999999999; struct mat

TYB的博客 441

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【BZOJ 2326】【HNOI 2011】数学作业【矩阵乘法】

题解由题意可列矩阵 A=⎛⎝⎜1110k011001⎞⎠⎟ \begin{pmatrix} 1 & 0 & 0\\ 1 & 1 & 0\\ 10^k & 1 &1\\ \end{pmatrix} F(n-1)=⎛⎝⎜1i−1f[n−1]⎞⎠⎟ \begin{pmatrix} 1\\ i-1\\ f[n-1]\\ \end{pmatrix} F(n)=A * F(n-1) 所以就可

cyclization的小栈 352

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

转载:DP常见题目

这里的dp范做根据网上的动态归法分析和网上的有个100个dp方程做的,题解很多是原版,没怎么动,有些是别人的一些其他做法,还有一些自己的想法。如果看到题解很别人一样,那就是摘自别人的。且这里只是一半。由于本文有些摘自网上,如有原主看到不想在此贴出的,请说明,将会撤出。如此文方法错误,或者冒犯某些原博主的文章还请见谅,还请指出,非常感谢机器分配(HNOI’...

dingwufu9301的博客 286

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

dp泛做1

这里的dp范做根据网上的动态归法分析和网上的有个100个dp方程做的,题解很多是原版,没怎么动,有些是别人的一些其他做法,还有一些自己的想法。如果看到题解很别人一样,那就是摘自别人的。且这里只是一半。 由于本文有些摘自网上,如有原主看到不想在此贴出的,请说明,将会撤出。 如此文方法错误,或者冒犯某些原博主的文章还请见谅,还请指出,非常感谢 机器分配(HNOI’95) 0-1背包变形ty

lyc 14万+

五月学习记录

5月17日-5月19日 1.学习: 主席树(静态,动态,树上主席树) LCA的离线Tarjan算法 5月20日 1.测试:JLOI_2016_day1:20分... 2.学习:高精度模板 3.做题: Codevs_1166_[NOIP2007]_矩阵取数游戏_(动态规划+高精度) 5月23日 1.学习: 计算...

aquz77529的博客 234

不想写博客的题目

2017.10.11 BZOJ1225: [HNOI2001] 求正整数 一个普通的搜索,应用了约数和公式,用对数来比较大小的思路很新颖(至少我没有想过)。 2017.10.12 BZOJ4149: [AMPPZ2014]Global Warming 单调栈,这篇题解写得很好点这里 唉,最近几天效率贼低……尤其是理解别人的代码,有时几乎对着打都一堆错,我还是滚去看初赛吧…… 2017...

TYB的博客 1083

OI题目整理

k3nn​。

weixin_42178241的博客 852
上一篇: [USACO13DEC] 最优挤奶Optimal Milking
下一篇: [USACO07OPEN] City Horizon
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值