【学习笔记】CF1864H Asterism Stream

从一道 简单题 联想了过来。

Part 1

先复述一遍官方题解的做法:记几何级数 f ( x ) = a k b x f(x)=ak^{bx} f(x)=akbx(也就是等比数列), [ 2 l , 2 r ] [2l,2r] [2l,2r]区间内的DP值可以表示为若干个几何级数的和。本题中 k = 1 2 k=\frac{1}{2} k=21,简记上述几何级数为 { a , b } \{a,b\} {a,b}

有递推式:

f x = k ( f x + 1 + f 2 x ) + 1 f_{x}=k(f_{x+1}+f_{2x})+1 fx=k(fx+1+f2x)+1

对于 x ∈ [ l , r ] x\in [l,r] x[l,r],不难归纳得到

f x = k r − x + 1 f r + 1 + ∑ i = 0 r − x f ( 2 x + 2 i ) k i + 1 + ∑ i = 0 r − x k i f_x=k^{r-x+1}f_{r+1}+\sum_{i=0}^{r-x}f(2x+2i)k^{i+1}+\sum_{i=0}^{r-x}k^i fx=krx+1fr+1+i=0rxf(2x+2i)ki+1+i=0rxki

显然,第一项可以表示为 { k r + 1 f r + 1 , − 1 } \{k^{r+1}f_{r+1},-1\} {kr+1fr+1,1},最后一项可以表示为 { 1 1 − k , 0 } + { − k r + 1 1 − k , − 1 } \{\frac{1}{1-k},0\}+\{-\frac{k^{r+1}}{1-k},-1\} {1k1,0}+{1kkr+1,1}。需要注意的是,应该写成关于 x x x的函数,且 k k k为常量。

大力化式子:

∑ { a , b } ∑ i = 0 r − x a k b ( 2 x + 2 i ) k i + 1 = a k ⋅ k 2 b x ∑ i = 0 r − x k i ( 2 b + 1 ) = a k ⋅ k 2 b x ⋅ 1 − k ( r − x + 1 ) ( 2 b + 1 ) 1 − k 2 b + 1 = a k ⋅ k 2 b x ( 1 1 − k 2 b + 1 − k ( r + 1 ) ( 2 b + 1 ) 1 − k 2 b + 1 k − 2 b x − x ) = a k 1 − k 2 b + 1 k 2 b x − k ( r + 1 ) ( 2 b + 1 ) 1 − k 2 b + 1 k − x = { a k 1 − k 2 b + 1 , 2 b } + { − k ( r + 1 ) ( 2 b + 1 ) 1 − k 2 b + 1 , − 1 } \begin{aligned} \sum_{\{a,b\}}\sum_{i=0}^{r-x}ak^{b(2x+2i)}k^{i+1}&=ak\cdot k^{2bx}\sum_{i=0}^{r-x}k^{i(2b+1)}\\&=ak\cdot k^{2bx}\cdot\frac{1-k^{(r-x+1)(2b+1)}}{1-k^{2b+1}}\\&=ak\cdot k^{2bx}\left(\frac{1}{1-k^{2b+1}}-\frac{k^{(r+1)(2b+1)}}{1-k^{2b+1}}k^{-2bx-x}\right)\\&=\frac{ak}{1-k^{2b+1}}k^{2bx}-\frac{k^{(r+1)(2b+1)}}{1-k^{2b+1}}k^{-x}\\&=\{\frac{ak}{1-k^{2b+1}},2b\}+\{-\frac{k^{(r+1)(2b+1)}}{1-k^{2b+1}},-1\} \end{aligned} {a,b}i=0rxakb(2x+2i)ki+1=akk2bxi=0rxki(2b+1)=akk2bx1k2b+11k(rx+1)(2b+1)=akk2bx(1k2b+111k2b+1k(r+1)(2b+1)k2bxx)=1k2b+1akk2bx1k2b+1k(r+1)(2b+1)kx={1k2b+1ak,2b}+{1k2b+1k(r+1)(2b+1),1}

其中 k 2 b x k^{2bx} k2bx k − 2 b x k^{-2bx} k2bx抵消这一步是可以预见的,因为求和上标的 x x x系数为负。

因此递推 log ⁡ n \log n logn个区间即可,注意使用欧拉定理。

预处理出 1 − 2 2 t − 1 1-2^{2^{t}-1} 122t1的逆元即可做到单次查询 O ( log ⁡ 2 n ) O(\log^2 n) O(log2n)

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
using namespace std;
const int mod=998244353;
int T;
ll n,inv2=(mod+1)/2;
ll fpow(ll x,ll y=mod-2){y=(y%(mod-1)+(mod-1))%(mod-1);ll z(1);for(;y;y>>=1){if(y&1)z=z*x%mod;x=x*x%mod;}return z;
}
vector<pair<ll,ll>>v,v2;
ll calc(ll x){ll y(0);ll tmp=x%(mod-1);for(auto e:v){ll a=e.fi,b=e.se;y=(y+a*fpow(inv2,b*tmp%(mod-1)))%mod;}return y;
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>T;while(T--){cin>>n;ll l=n,r=2*n-1;v.clear();while(l>1){l=(l+1)/2,r=r/2;ll x=(fpow(inv2,r+1)*calc(r+1)%mod-fpow(inv2,r))%mod;v2.clear();for(auto e:v){ll a=e.fi,b=e.se,mul=fpow(inv2,2*b+1)-1;mul=fpow(mul);v2.pb({-a*inv2%mod*mul%mod,2*b%(mod-1)});ll tmp1=(2*b+1)%(mod-1),tmp2=(r+1)%(mod-1);x=(x+a*fpow(inv2,tmp1*tmp2%(mod-1)+1)%mod*mul%mod)%mod;}v=v2;v.pb({x,-1}),v.pb({2,0});}cout<<(calc(1)+mod)%mod<<"\n";}
}

Part 2

考虑简单题中的做法:首先得到转化后的递推式 f i = 2 f i − 1 − f i − 1 2 [ i ∤ 2 ] + a f_{i}=2f_{i-1}-f_{\frac{i-1}{2}}[i\nmid 2]+a fi=2fi1f2i1[i2]+a(通常来说,我们希望递推涉及的项越少越好),而 i − 1 2 \frac{i-1}{2} 2i1可以看作 ⌊ i 2 ⌋ \lfloor\frac{i}{2}\rfloor 2i,为什么我们只需要 log ⁡ n \log n logn的空间?因为递推只涉及这 log ⁡ n \log n logn个项,换句话说, f i , f ⌊ i 2 ⌋ , f ⌊ i 4 ⌋ , . . . f_i,f_{\lfloor\frac{i}{2}\rfloor},f_{\lfloor\frac{i}{4}\rfloor},... fi,f2i,f4i,... 这些元素的信息是封闭的,当从 i − 1 i-1 i1递推到 i i i时我们可以根据 i i i包含的 2 2 2的个数得到转移矩阵(这里用到了取整函数的基本性质)。

因此,设 f i f_i fi表示数列包含 i i i的概率,有递推式

f i = k ( f i − 1 + f i 2 [ 2 ∣ i ] ) f_{i} =k(f_{i-1}+f_{\frac{i}{2}}[2\mid i]) fi=k(fi1+f2i[2i])

注意到若 x ∈ [ 1 , 2 k ) x\in [1,2^{k}) x[1,2k),则 v 2 ( x ) = v 2 ( x + 2 k ) v_2(x)=v_2(x+2^k) v2(x)=v2(x+2k)(二进制下末尾 0 0 0的个数),因此可以递推求出 [ 1 , 2 k + 1 ) [1,2^{k+1}) [1,2k+1)的矩阵乘积。

然而由于是矩阵的递推,因此非常慢,只能做到预处理 O ( log ⁡ 4 n ) O(\log^4 n) O(log4n),查询 O ( log ⁡ 3 n ) O(\log^3 n) O(log3n)

Part 3

可以先还是转化成对数列包含 i i i的概率求和,然后转化成对恰好等于 n − 1 n-1 n1的方案求和。然后数位DP,这就是CF1290F Making Shapes。

还可以多项式。这是因为 n − 1 n-1 n1的二进制拆分固定,因此从高位到低位调整,发现实际上就是在做若干次前缀和。因此可以猜测答案就是次数为二进制位数 L L L的多项式。不过如果方案带权值的话显然就不对了(如前所述,答案应该是关于 x x x的几何级数)。

Part 4

众所周知矩阵乘法实在是太慢了,因此我曾经试图用多项式插值来代替矩阵乘法。现在想来这个想法是比较可笑的,因为矩阵乘法是用来加速递推的,而如果递推出来是几何级数那么显然就不能用多项式来求。

不过多项式插值还有其他的应用。例如我出的某一道题。🤔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中uview组件库的Search 搜索 的用法

目录 基本使用 #设置输入框形状 #是否开启清除控件 #是否开启右边控件 #自定义样式 API #Props #Events 基本使用 通过placeholder参数设置占位内容通过v-model双向绑定一个变量值&#xff0c;设置初始化时搜索框的值&#xff0c;如果初始内容为空&#xff0c;那么请绑…

高通guestOS与hostOS通信框架HAB源码分析——概述

1)什么是HAB&#xff0c;他用来干什么&#xff1f; 如果你了解virtIO的话&#xff0c;就很容易明白HAB是用来干什么的。一句话来说&#xff0c;HAB实际作用和virtIO差不多。以高通8155&#xff08;host qnxguest安卓&#xff09;为例&#xff0c;所有硬件外设驱动都在qnx端&am…

二进制安装包安装Prometheus插件安装(mysql_exporter)

简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的&#xff0c;mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署&#xff0c;也可以通过容器形式部署&#xff0c;但为了数据收集的准确性&#xff0c;推荐二进制安装。 一&#xff0c;下载安…

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III 打家劫舍 198.打家劫舍 文章讲解&#xff1a;https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 题目链接&#xff1a;https://leetcode.cn/problems/house-robber…

[C#]使用onnxruntime部署yolov8-onnx实例分割模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

Android Framework | Linux 基础知识:入门指南

Android Framework | Linux 基础知识&#xff1a;入门指南 进行Android Framework开发需要具备基本的Linux基本知识&#xff0c;下面是一份Linux基础知识入门指南&#xff0c;希望对你有所帮助&#xff01; 1. 简介 Linux 是一种免费、开源的操作系统&#xff0c;它是由芬兰…

文件高效复制与删除:轻松删除垃圾文件,让文件夹焕然一新!

你是否经常遇到文件复制繁琐、删除垃圾文件困难的问题&#xff1f;现在&#xff0c;我们为你提供了一款强大的文件高效复制与删除工具&#xff0c;让你轻松实现目标文件夹的整洁与高效&#xff01; 第一步&#xff0c;我们要打开目标文件夹&#xff0c;就会发现里面有很多其他的…

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学&#xff1a;物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果&#xff0c;文章题为“Optical experimental solution for the multiway numb…

Python练习之列表两数之和

列表两数之和 给定一个已按照非递减顺序排列的整数数组numbers,请你从数组中找出两个数满足相加之和等于target 函数应该以长度为2的整数数组的形式返回这两个数的下标值。numnbers的下标值从1开始&#xff0c;所以答案数组应当满足1<answer[0]<answer[0]<numbers.len…

Android--Jetpack--Paging详解

不尝世间醋与墨&#xff0c;怎知人间酸与苦。 择一业谋食养命&#xff0c;等一运扭转乾坤。 你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 不尝世间醋与墨&#xff0c;怎知人间酸与苦。择一业谋食养命&#xff0c;等一运扭转乾坤。你见过哪些令你膛目结舌的代码技…

mycat 安装和水平分表

1.拉取需要创建docker版的mycat资源 # 下载对应的资源 git clone https://github.com/ruanjiayu/docker.mycat # 进入docker.mycat cd /home/cluster/mycat/docker.mycat # 构建镜像 docker-compose build 2.修改配置 vim config/mycat/schema.xml <?xml version"…

three.js gltf后处理颜色异常(伽马校正)

效果&#xff1a; 应用了伽马校正&#xff0c;好像效果不明显 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…

各类好用的API推荐,赶紧收藏

快递物流订阅与推送&#xff08;含物流轨迹&#xff09;&#xff1a;【物流订阅与推送、H5物流轨迹、单号识别】支持单号的订阅与推送&#xff0c;订阅国内物流信息&#xff0c;当信息有变化时&#xff0c;推送到您的回调地址。地图轨迹支持在地图中展示包裹运输轨迹。包括顺丰…

考特殊教师证需要哪些条件

想要从事特殊教育工作&#xff0c;首先需要具备特殊教师证。那么&#xff0c;考取特殊教师证需要哪些条件呢&#xff1f;下面我将从几个方面为大家详细解答。 需要具备相应的学历背景。一般来说&#xff0c;申请特殊教师证需要具备本科及以上学历&#xff0c;且需要具备教育学、…

玩转朋友圈!这样运营朋友圈吸睛又吸金!

朋友圈已成为现代社交媒体中不可或缺的平台&#xff0c;并且有很大的潜力用于营销和推广。那么如何才能让朋友圈在众多用户中脱颖而出&#xff0c;吸引眼球并提升商业效益呢&#xff1f;主要从以下几点出发&#xff1a; 首先&#xff0c;要想吸引关注&#xff0c;您需要在朋友…

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

关闭MobaXterm等连接linux服务器的软件,依旧可以后台运行程序

linux screen 命令 &#xff08;1&#xff09;连接服务器&#xff0c;在服务器终端安装screen apt install screen &#xff08;2&#xff09;创建screen窗口&#xff0c;mm为窗口名。就可以在这里运行你的命令了 此时该窗口的状态变为 Attached screen -S mm &#xff08;3…

手把手教你,Selenium 遇见伪元素该如何处理?

Selenium 遇见伪元素该如何处理&#xff1f; 前言 问题发生 在很多前端页面中&#xff0c;大家会见到很多&#xff1a;:before、::after 元素&#xff0c;比如【百度流量研究院】&#xff1a; 比如【百度疫情大数据平台】&#xff1a; 以【百度疫情大数据平台】为例&#xff…

一文掌握文本语义分割:从朴素切分、Cross-Segment到阿里SeqModel

前言 之所以写本文&#xff0c;源于以下两点 在此文《基于LangChainLLM的本地知识库问答&#xff1a;从企业单文档问答到批量文档问答》的3.5节中&#xff0c;我们曾分析过langchain-chatchat项目中文本分割相关的代码&#xff0c;当时曾提到该项目中的文档语义分割模型为达摩…

MySQL日志管理 、备份与恢复

mysql日志管理 、备份与恢复 备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 而备份、恢复中&#xff0c;日志起到了很重要的作用 #######前言&#xff1a;日志⭐⭐ MySQL 的日志默认保存位置为 /usr/local/mysql/data ##配…