【LOJ NOI Round#2 Day1 T1】单枪匹马(矩阵乘法)
操作二要求的东西是一个循环迭代的东西,手推相邻两项找下规律,发现相邻两项的分子分母间含有线性关系,考虑用矩阵乘法求解。对于 \([1,n]\)的询问,从后往前倒推, \(x_{n-1}=a_{n-1} \times x_{n} + y_{n}\), \(y_{n-1}=x_{n}\),其中 \(x_{n}=a_{n},y_{n}=1\), \(x_{i},y_{i}\)分别代表从后往前计算到第 \(i\)项时的分子分母,第 \(i\)个数的初始矩阵为 \(\left[ \begin{matrix} 0 & 1 \\ 1 & a_{i} \end{matrix} \right]\),这样从后往前乘,最终得到的矩阵的 \(matrix[1][2]\)即为 \(y\)值, \(matrix[2][2]\)即为 \(x\)值。所以做一下前缀积即可,用数组 \(pre\)表示。对于 \([l,r]\)的询问,计算逆矩阵前缀积,用数组 \(inv\_pre\)表示,第 \(i\)项的初始逆矩阵为 \(\left[ \begin{matrix} -a_{i} & 1 \\ 1 & 0 \end{matrix} \right]\)。答案等于 \(inv\_pre[l-1] \times pre[r]\),因为矩阵乘法不满足交换律,所以注意乘的顺序,\(inv\_pre\)要倒着乘,具体看代码。
#include<cstdio>
#include<cstring>
const int mod = 998244353;
const int N = 1e6 + 5;
struct Matrix{
int a[3][3];
Matrix() { memset(a, 0, sizeof(a)); }
Matrix operator *(const Matrix &ret)const{
Matrix ans;
for(int k = 1; k <= 2; ++k)
for(int i = 1; i <= 2; ++i)
for(int t = 1; t <= 2; ++t)
ans.a[i][t] = (ans.a[i][t] + 1LL * a[i][k] * ret.a[k][t]) % mod;
return ans;
}
}pre[N], inv_pre[N];
int n, m, type, cnt;
void add(int pos, int num){
pre[pos].a[1][2] = pre[pos].a[2][1] = 1;
pre[pos].a[2][2] = num;
inv_pre[pos].a[1][2] = inv_pre[pos].a[2][1] = 1;
inv_pre[pos].a[1][1] = mod - num;
pre[pos] = pre[pos - 1] * pre[pos];
inv_pre[pos] = inv_pre[pos] * inv_pre[pos - 1]; // 倒着乘
}
int main(){
scanf("%d%d%d", &n, &m, &type); cnt = n;
pre[0].a[1][1] = pre[0].a[2][2] = 1;
inv_pre[0].a[1][1] = inv_pre[0].a[2][2] = 1;
for(int i = 1, x; i <= n; ++i){
scanf("%d", &x);
add(i, x);
}
int opt, l, r, x, last = 0;
while(m--){
scanf("%d", &opt);
if(opt == 1){
scanf("%d", &x);
if(type) x ^= last;
add(++cnt, x);
}
else{
scanf("%d%d", &l, &r);
if(type) l ^= last, r ^= last;
Matrix p = inv_pre[l - 1] * pre[r];
int x = p.a[2][2], y = p.a[1][2];
last = x ^ y;
printf("%d %d\n", x, y);
}
}
return 0;
}
【LOJ NOI Round#2 Day1 T1】单枪匹马(矩阵乘法)的更多相关文章
- codevs矩阵乘法系列
T1:矩阵乘法板子题,练手. #include <map> #include <set> #include <cmath> #include <ctime&g ...
- LibreOJ NOI Round #2 Day 1
LibreOJ NOI Round #2 Day 1 T1: 别被定义弄晕了 反着做,A->1/A+B 取倒数没法做,所以变成a/b,维护2*2的矩阵 区间?不用线段树,不用倍增 存在逆矩阵,直 ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- loj#2128. 「HAOI2015」数字串拆分 矩阵乘法
目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个 ...
- 【LOJ511】[LibreOJ NOI Round #1]验题(动态DP)
我这道题写了整!整!三!天! 我要一定要写这篇博客来表达我复!杂!的!心!情! 题目 LOJ511 官方题解(这个题解似乎不是很详细,我膜 std 才看懂的) 调这道题验证了我校某人的一句话:调题是一 ...
- 「LibreOJ NOI Round #2」不等关系
「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的 ...
- LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿
二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱 ...
- Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...
- Noip2014 提高组 Day1 T1 生活大爆炸版石头剪刀布 + Day2 T1 无线网络发射器选址
Day1 T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升 ...
- Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)
1287 矩阵乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小明最近在为线性代数而头疼, ...
随机推荐
- axios快速上手(简单使用)
axios对ajax请求进行了封装,并且使用promise的链式调用使得网络请求的代码逻辑更为清晰,同时支持async和await的编写方式使代码看起来像同步,更加方便于理解和阅读.axios这个库的 ...
- C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章
今天继续研究C#的WinForm的实例显示效果. 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 ).这就有一个问题,程 ...
- 聊聊JDK1.0到JDK20的那些事儿
1.前言 最近小组在开展读书角活动,我们小组选的是<深入理解JVM虚拟机>,相信这本书对于各位程序猿们都不陌生,我也是之前在学校准备面试期间大致读过一遍,emm时隔多日,对里面的知识也就模 ...
- uni微信小程序隐私协议
最近小程序又新增了个 隐私协议弹窗.需要用户去授权,官网的一些API才能使用.官网地址 功能展示 项目地址:https://ext.dcloud.net.cn/plugin?id=14358 1.ma ...
- api接口对接如何实现商品数据采集的
在当前互联网行业中,快速准确地采集和处理大量数据是非常重要的一项任务.而实现商品数据采集则是许多企业和电商平台必须完成的任务之一.使用API接口对接进行商品数据采集可以大大提高数据采集效率和准确性.下 ...
- 【项目源码】JSP超市积分管理系统源码下载
会员积分管理系统的目标是为中小规模的会员积分管理系统的目标是为中小规模的超市提供会员信息管理.会员积分管理以及积分兑换管理的具体解决方案. 网站和积分管理系统采用B/S结构,使用J2EE的技术开发完成 ...
- 2.14 PE结构:地址之间的转换
在可执行文件PE文件结构中,通常我们需要用到地址转换相关知识,PE文件针对地址的规范有三种,其中就包括了VA,RVA,FOA三种,这三种该地址之间的灵活转换也是非常有用的,本节将介绍这些地址范围如何通 ...
- JDK21来了!附重要更新说明
JDK21 计划23年9月19日正式发布,虽然一直以来都是"版本随便出,换 8 算我输",但这么多年这么多版本的折腾,如果说之前的 LTS版本JDK17你还觉得不香,那 JDK21 ...
- 用go封装一下二级认证功能
用go封装一下二级认证 本篇为用go设计开发一个自己的轻量级登录库/框架吧 - 秋玻 - 博客园 (cnblogs.com)的二级认证业务篇,会讲讲二级认证业务的实现,给库/框架增加新的功能. 源码: ...
- destoon根据目录下的html文件生成地图索引
因为项目需要,destoon根据目录下的html文件生成地图索引,操作方法,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...