CF1920 D. Array Repetition [细节规律题]

传送门:CF

[前题提要]:一道*1800,本题思路很好想,就是找循环,但是细节较多,故写一篇题解

直接进入正题.
模拟一下题意,最后不难发现我们最后的字符串应该是一个字符串S1的循环加上一个S2的形式.(当然可能没有S2).

更具体的举一个小栗子,设 x , y , z , k x,y,z,k x,y,z,k为字符串,包含了多个字符.那么我们最后的字符串的形式应该如下:

X
X
XY
X
X
XYZ
X
X
XY
X
X
XYZK

也就是很多个循环套在一起的形式.显然对于我们想要找的位置 p p p,我们应该从外部一层一层递归去找它属于哪一个循环,也就是一层一层的去掉我们的循环.更具体的来讲,如果我们的 p p p所处于的值在 K K K字符串中的一个字符位置,那么显然我们此时的答案就是找到K,然后在里面找位置,此时就很好解决了.

但是如果不处于我们的K位置应该怎么解决呢,我们就会发现显然他是处于之前的那一个循环之中的.我们对每一个循环节取一个模,就可以顺利的将最外层的一层循环去掉,此时只要看内一层的循环即可.也就是说,此时我们只需要考虑(假设此时的位置处于Y位置的话):

X
X
XY
X
X
XYZ

那么此时我们操作方式就是和上面一样的了.如果此时的 p p p处于增加字符的位置(也就是Z)的位置,我们可以很容易的将这个字符算出(只要将p减去循环节的长度乘循环的次数就可以算出在Z的具体位置).如果不是的话,那么显然在更内部的循环之中,那我们又可以去掉一个循环…

这样反复递归,最后就可以求出来了.
当然你在实现这道题的过程中不难会发现你递归的次数是很少的,不超过60个,因为每一个操作2都至少会扩大两倍,所以递推次数是log的.所以复杂度是正确的.


下面是具体的代码部分:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls (rt<<1)
#define rs (rt<<1|1)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
inline void print(__int128 x){if(x<0) {putchar('-');x=-x;}if(x>9) print(x/10);putchar(x%10+'0');
}
#define maxn 1000000
#define int __int128
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
struct Q{int opt,x;
}ques[maxn];
signed main() {int T=read();while(T--) {int n=read();int q=read();vector<int>v;int num=0;v.push_back(0);map<int,int>mp;int cnt=0;for(int i=1;i<=n;i++) {ques[i].opt=read();ques[i].x=read();if(ques[i].opt==1) {num++;}else {if(v.back()>=1e18) continue;mp[++cnt]=i;v.push_back(num);num=num*(ques[i].x+1);}}int len=0;for(int i=1;i<=q;i++) {int k=read();int pos=0;if(k>v[cnt]*(ques[mp[cnt]].x+1)) {print(ques[k-v[cnt]*(ques[mp[cnt]].x+1)+mp[cnt]].x);cout<<" ";continue;}int flag=0;for(int j=cnt;j>=1;j--) {k=(k-1)%v[j]+1;if(k>v[j-1]*(ques[mp[j-1]].x+1)) {print(ques[k-v[j-1]*(ques[mp[j-1]].x+1)+mp[j-1]].x);cout<<" ";break;}else {continue;}	}}cout<<endl;}return 0;
}

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

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

相关文章

Javascript——async、await详解

一、async、await是什么&#xff1f; async用于申明一个function是异步的&#xff1b; 而await则可以认为是 async await的简写形式&#xff0c;是等待一个异步方法执行完成的。**async函数** 通过在函数声明前加上async关键字&#xff0c;可以将任何函数转换为返回Promise的异…

nginx基本优化

安装nginx隐藏版本号 查看百度web服务器 [rootcjq11 ~]# curl -I http://www.baidu.com 隐藏nginx服务器版本号 [rootcjq11 ~]# cd /usr/local/src/nginx-1.22.0/ [rootcjq11 nginx-1.22.0]# vim src/core/nginx.h第13、14行修改版本号和服务器名称 [rootcjq11 nginx-1.2…

HAL库配置RS485通信

在配置好串口的基础上完成RS485的配置 一、使能RS485的发送和接收模式引脚 __HAL_RCC_GPIOG_CLK_ENABLE();//高电平是发送模式&#xff0c;低电平是接收模式&#xff0c;默认是接收模式HAL_GPIO_WritePin(PG4_RS485_DIR1_Port, PG4_RS485_DIR1_Pin, GPIO_PIN_RESET);GPIO_Init…

特征工程-特征处理(三)

特征处理 连续型变量处理&#xff08;二&#xff09; 多特征 降维 PCA PCA是一种常见的数据分析方式&#xff0c;通过数据分解&#xff0c;将高维数据降低为低维数据&#xff0c;同时最大程度保持数据中保存的信息。 from sklearn.decomposition import PCA A np.array([[84…

6、Pandas处理数据类型和缺失值

文章目录 简介数据类型缺失数据解决最常见的阻碍数据处理进展的问题 本节夸克网盘数据集链接:https://pan.quark.cn/s/07400ba46613 提取码:Z9sZ 简介 在本教程中,您将学习如何查看DataFrame或Series中的数据类型。您还将学习如何查找并替换数据。 数据类型 DataFrame或…

计算机毕业设计----SSH滑雪场场地租赁管理系统

项目介绍 该项目主要包括三个角色&#xff1a;管理员、收银员、用户&#xff1b; 用户角色包含以下功能&#xff1a; 用户登录,修改个人信息,查看我的订单等功能。 管理员角色包含以下功能&#xff1a; 管理员登录,滑雪场管理,订单管理,教练管理,器材管理,会员管理,收银员管…

【手撕C语言 第二集】初识C语言

​​ 一、变量的作用域和生命周期 作用域&#xff1a;一个变量在哪里可以使用它&#xff0c;哪里就是它的作用域。 局部变量的作用域&#xff1a;变量所在的局部范围 全局变量的作用域&#xff1a;整个工程 不管整个工程里面有多少源文件&#xff0c;都可以使用全局变量。这样…

WiFi7: ML建立流程

原文:ML (重)建立在non-AP MLD和AP MLD之间建立链接(link(s)),其基于(重)关联请求和(重)关联响应帧的简化完成。 NOTE-在以上流程之前,non-AP MLD和AP MLD必须进行认证流程。 原文:non-AP MLD可以发起 ML (重)建立,来建立一个或多个链接。Non-AP MLD必须发送(重)关联…

sqlilabs第五十七五十八关

Less-57(GET - challenge - Union- 14 queries allowed -Variation 4) 手工注入 Less-58(GET - challenge - Double Query- 5 queries allowed -Variation 1) 手工注入 报错注入就可以&#xff08;布尔注入的话次数不够&#xff09;(所以我们前面需要做够足够的数据支持) 最后…

关于 ant-design-vue resetFields 失效

关于 ant-design-vue resetFields 失效 背景&#xff1a; 遇到这样的问题使用ant-design-vue useForm来制作表单的时候&#xff0c;resetFields()失效 场景&#xff1a; 编辑 -赋值 新增-初始值&#xff08;问题点&#xff1a;新增的时候他就不初始化&#xff09; 方案&…

IDEA 常用快捷键(持续更新)

常用操作 快捷键描述Shift F10执行Alt /提示补全Ctrl /单行注释Ctrl Shift /多行注释Alt Enter根据光标所在问题&#xff0c;提供快速修复选择Alt Insert代码自动生成&#xff0c;如生成对象的构造函数等 查看源码 Ctrl Shifti出现类似于预览的小窗口Ctrl Enter完全…

【模板规范】会议纪要模板

文章目录 1、简介2、纪要模板2.1、表格类会议纪要2.2、文档类会议纪要2.3、简易版项目纪要 3、会议纪要3.1、作用3.2、特点3.2.1、工作会议纪要3.2.2、代表会议纪要3.2.3、座谈会议纪要3.2.4、联席会议纪要3.2.5、办公会议纪要3.2.6、汇报会议纪要3.2.7、技术鉴定会议纪要 3.3、…

C++ 之LeetCode刷题记录(十一)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 向耗时0s前进。 67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入…

笙默考试管理系统-MyExamTest----codemirror(72)

笙默考试管理系统-MyExamTest----codemirror&#xff08;72&#xff09; 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest--…

JavaScript 中生成二维码,你可以使用第三方库,其中最流行和广泛使用的是 QRCode.js。以下是使用 QRCode.js 生成二维码的基本步骤:

要在 JavaScript 中生成二维码&#xff0c;你可以使用第三方库&#xff0c;其中最流行和广泛使用的是 QRCode.js。以下是使用 QRCode.js 生成二维码的详细的步骤如下&#xff1a; 步骤 1: 引入 QRCode.js 库 首先&#xff0c;将 QRCode.js 库引入到你的 HTML 文件中。你可以从…

【高危】Apache Solr 环境变量信息泄漏漏洞

漏洞描述 Apache Solr 是一款开源的搜索引擎。 在 Apache Solr 受影响版本中&#xff0c;由于 Solr Metrics API 默认输出所有未单独配置保护策略的环境变量。在默认无认证或具有 metrics-read 权限的情况下&#xff0c;攻击者可以通过向 /solr/admin/metrics 端点发送恶意请…

从数据可视化到场景渲染:山海鲸的创新与实践

作为山海鲸的开发者&#xff0c;我们深知可视化模型场景渲染在数据分析和决策支持中的重要作用。因此在保证山海鲸可视化软件免费编辑、分享、部署的同时也在场景渲染方面不断优化&#xff0c;本文将介绍山海鲸在可视化模型场景渲染方面的技术革新与实践探索。 首先&#xff0…

C#核心--思维导图

对应《C#--核心》&#xff08;http://t.csdnimg.cn/cpRbZ&#xff09;

BFS(广度优先搜索)_层序遍历最短路径_总结

层序遍历 LeetCode 102. Binary Tree Level Order Traversal 二叉树的层序遍历&#xff08;中等&#xff09; LeetCode 103. Binary Tree Zigzag Level Order Traversal 之字形层序遍历 LeetCode 199. Binary Tree Right Side View 找每一层的最右结点 LeetCode 515. Find Larg…

3d姿态 mhformer 预测代码

目录 预测并可视化代码 调整部分代码&#xff1a; 可视化推理&#xff1a; mhformer 也是先进行人体检测&#xff0c;输出2d关键点&#xff0c;再估计3d关键点&#xff0c; 预测并可视化代码 需要注释掉plt.switch_backend(agg) 调整部分代码&#xff1a; output_dir_3D …