当前位置: 首页 > news >正文

【CF】Day146——杂题 (递归 | 规律与操作)

C. Mark and His Unfinished Essay

题目:

思路:

递归

看到如此巨大的 k 和 l r,显然不能暴力,因此考虑性质

可以想到一种递归的方式,因为后面的字符可以从前面转移过来,而这个转移的过程就很容易想到递归,但是就是有点不好写

我们定义 sum[i] 为执行到了第 i 次操作后的字符串长度,显然可以二分出第一个大于等于 k 的操作位置,然后根据这个进行转移,但是转移到哪呢?

假设第一个大于等于 k 的区间是红色的操作区间,那么显然 k 的字符取决于上一次的操作区间,也就是如下图的蓝色部分

那么这个 k 的字符就对应着上一个操作的相对位置,即下图所示位置(绿色部分相同)

所以我们求出 k‘ 即可,然后不断递归到 1 ~ n 内即可

不难发现,k’ 的大小就是  (l[i] - 1) + (k - sum[i - 1]),这是显然的

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int n,c,q;cin >> n >> c >> q;string s;cin >> s;s = ' ' + s;vector<int> sum(c+1,0);sum[0] = n;vector<int> l(c+1),r(c+1);for (int i = 1; i <= c; i++){cin >> l[i] >> r[i];sum[i] = sum[i-1] + r[i] - l[i] + 1;}auto query = [&](auto && self,int k)->int{if(k <= n)return k;auto index = lower_bound(sum.begin(),sum.end(),k) - sum.begin();int nk = k - sum[index - 1] + l[index] - 1;return self(self,nk);};while (q--){int k;cin >> k;cout << s[query(query,k)] << endl;}
}signed main()
{cin.tie(0)->sync_with_stdio(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}

D. Magical Array

题目:

思路:

经典的找特征

参考:CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A~F - 知乎

还是熟悉的讨论,遇到操作类型的题目就是找规律,这一次的规律比较难找

如果注意力惊人,我们可以发现前缀和 pre[i] 满足以下特征

所以对于普通数组其 pre[i] 之和不变,但是特殊数组的 pre[i] 明显是减少的,且每次减少 1

因此求出 pre[i] 和最小的即可,操作数就是与普通数组的 pre[i] 的和之差

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int n,m;cin >> n >> m;vector<int> sum(n);for (int i = 0; i < n; i++){int x = 0,s = 0;for (int j = 1; j <= m; j++){cin >> x;s += x;sum[i] += s;}}int mx = -1e18;for (int i = 0; i < n; i++){mx = max(mx,sum[i]);}int index = -1;for (int i = 0; i < n; i++){if(sum[i] != mx){index = i;break;}}cout << index + 1 << " " << mx - sum[index] << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}

http://www.dtcms.com/a/392970.html

相关文章:

  • PyTorch 中特征变换:卷积与转置卷积
  • HashMap底层原理详解:扩容、红黑树与ConcurrentHashMap的线程安全
  • autodl文件存储,文件同步,conda环境同步问题
  • 【ROS2】Begginer : CLI tools - 理解 ROS 2 话题
  • Java网络编程:从基础到实战
  • 面试MYSQL的索引类型、索引的工作原理、以及索引优化策略
  • 一、Pytorch安装教程-windows环境,利用Anaconda搭建虚拟环境,Pycharm开发工具
  • JWT登录校验
  • 对症下药:电商、B2B、本地服务和内容媒体的GEO定制化策略
  • 分类预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络多特征分类预测
  • pcl封装11 (快速定义)旋转矩阵
  • Windows 系统中如何通过 Docker 调用 CUDA 和 cuDNN 加速大模型推理
  • 从零编写vue3系统--5步教学
  • 嵌入式Linux C语言程序设计三
  • 【记录】初赛复习 Day5 6(2021S第一轮错题,内附深井题目讲解)
  • 【C++】类和对象—(下) 收官之战
  • 人工智能学习:什么是迁移学习
  • 模型进阶与神经网络
  • 微软.NET离线运行库合集 v2025.09.09_Win中文_NET运行库_安装教程
  • Galileo AI-AI驱动的UI界面设计工具
  • 布谷鸟布隆过滤器和计数式布隆过滤器和原始布隆过滤器相比分别解决了什么问题?
  • 大模型介绍
  • 基于Springboot的无人之境智能酒店服务平台
  • ICCV-2025 | 大模型驱动的认知导航框架!CogNav:面向目标导航的大型语言模型驱动的认知过程建模
  • java-异常
  • 网络编程:一个 TCP 服务器的简易实现(epoll 版本)
  • 【MySQL学习】关于MySql语句执行、查询、更新流程原理总结
  • C++语法深度剖析与面试核心详解
  • 【Tomcat】基础总结:类加载机制
  • 127、【OS】【Nuttx】【周边】效果呈现方案解析:比较浮点数(上)