Educational Codeforces Round 66 (Rated for Div. 2) A~F

news/2025/10/25 21:12:55/文章来源:https://www.cnblogs.com/Kescholar/p/19165982

A - From Hero to Zero

模拟。

能除 \(k\) 直接除 \(k\),否则减掉余数部分。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {i64 n, k;std::cin >> n >> k;i64 ans = 0;while(n){while(n && n % k == 0){n /= k;ans += 1;}ans += n % k;n -= n % k;}std::cout << ans << "\n";}
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

B - Catch Overflow!

模拟。

用栈维护每次操作的和,碰到 end 就把前一个 for 到现在的和取出来乘以该次的循环次数,溢出直接退出即可。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n;std::cin >> n;i64 x = (1LL << 32) - 1;std::stack<std::array<i64,2>> st;std::vector<std::array<int,2>> num;for(int i = 0; i < n; i += 1) {std::string s;std::cin >> s;if(s == "add") {st.push({1, i});} else if(s == "for") {int a;std::cin >> a;num.push_back({a, i});} else {i64 tmp = 0;while(st.size() && st.top()[1] >= num.back()[1]) {tmp += st.top()[0];st.pop();}auto k = num.back()[0];num.pop_back();if(tmp * k > x) {std::cout << "OVERFLOW!!!\n";return 0;}st.push({tmp * k, i});}}i64 now = 0;while(st.size()) {now += st.top()[0];st.pop();if(now > x) {std::cout << "OVERFLOW!!!\n";return 0;}}std::cout << now << "\n";return 0;
}

C - Electrification

枚举。

\(|a_i-x|\) 表示 \(a_i\)\(x\) 的距离,那么找离 \(k+1\) 近的距离就是离它第 \(k+1\) 近的点,则前面 \(k\) 个点都是 \(x\) 两周形成了一段连续的区间。

假设离 \(x\) 最近的 \(k\) 个点为 \(a_i,..,a_{i+k-1}\),那么第 \(k+1\) 小的距离就在两端,即 \(f_k(x)=\min(x-a_{i-1},a_{i+k}-x)\),也就是说可以枚举 \(k+1\) 长度的区间,那么这个第 \(k+1\) 点要么是 \(a_i\),要么是 \(a_{i+k}\),选取最小的一个即可,那么位置就是 \(a_i+\frac{a_{i+k}-a_i}2\)

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {int n, k;std::cin >> n >> k;int ans = -1, l = INT_MAX;std::vector<int> a(n);for(int i = 0; i < n; i += 1) {std::cin >> a[i];if(i >= k) {int j = i - k, d = (a[i] - a[j]);if(d < l){l = d;ans = a[j] + d / 2;}}}std::cout << ans << "\n";}
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

D - Array Splitting

数学。

\(S_k=\sum_{i=k}^na_i\) 表示为从 \(k\)\(n\) 的后缀和,\(p_i\) 表示第 \(i\) 个子数组的起点下标,显然有 \(p_1=1,p_i<p_{i+1}\)

那么 \(\sum\limits_{i=1}^{n} (a_i \cdot f(i))=1\cdot(S_{p_1}-S_{p_2})+2\cdot(S_{p_2}-S_{p_3})+\cdots+k\cdot (S_{p_k}-0)\),拆开得 \(S_{p_1}+(2-1)S_{p_2}+(3-2)S_{p_3}+\cdots+(k-(k-1))S_{p_k}=S_{p_1}+S_{p_2}+S_{p_3}+\cdots+S_{p_k}\),显然,除了 \(p_1\) 是固定的,其他的 \(S_{p_2\sim p_k}\) 是可以任意选择的,所以预处理 \(S_i\),选取前 \(k-1\) 大的 \(S_{2\sim n}\) 再加上 \(S_1\) 即可。

参考[1]

点击查看代码
#include <bits/stdc++.h>using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n, k;std::cin >> n >> k;std::vector<int> a(n);for(int i = 0;i < n;i += 1){std::cin >> a[i];}std::vector<i64> p(n);for(int i = n - 1;i >= 0;i -= 1){p[i] = a[i];if(i < n - 1){p[i] += p[i + 1];}}sort(p.begin() + 1, p.end(), std::greater<>());i64 ans = 0;for(int i = 0;i < k;i += 1){ans += p[i];}std::cout << ans << "\n";return 0;
}

E - Minimal Segment Cover

倍增。

\(f_{i,k}\) 为从 \(i\) 跑了 \(2^k\) 步最远到达的距离,那么初始可以用指针维护每个坐标能到达的最远距离即可,不能到达的用 \(-1\) 表示。

最后判断的时候先判断 \(f_{i,k}<r\)再去跳,不断地逼近 \(r\),判断大于等于 \(r\) 可能会一次性跳很多之类的,最后跳到 \(x\) 位置,再看 \(x\) 能不能到达 \(r\),能的话再单独跳一次即可。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n, m;std::cin >> n >> m;int max = 0;std::vector<std::array<int,2>> a(n);for(auto &[l, r] : a) {std::cin >> l >> r;max = std::max(max, r);}sort(a.begin(), a.end());int j = 0, now = -1;std::vector<std::array<int,21>> f(max + 1);for(int i = 0; i <= max; i += 1) {if(i >= now) {now = -1;}while(j < n && i >= a[j][0]) {now = std::max(now, a[j][1]);j += 1;}f[i][0] = now;}for(int j = 1; j <= std::__lg(max) + 1; j += 1) {for(int i = 0; i <= max; i += 1) {if(f[i][j - 1] == -1) {f[i][j] = -1;continue;}f[i][j] = f[f[i][j - 1]][j - 1];}}while(m --) {int l, r;std::cin >> l >> r;if(r > max) {std::cout << "-1\n";continue;}int ans = 0;for(int i = std::__lg(max) + 1; i >= 0; i -= 1) {if(f[l][i] < r && ~f[l][i]) {l = f[l][i];ans += 1 << i;}}if(f[l][0] == -1) {std::cout << "-1\n";continue;}if(f[l][0] >= r) {ans += 1;}std::cout << ans << "\n";}return 0;
}

F - The Number of Subpermutations

异或哈希。

一个区间 \([l,r]\) 要满足是一个 \(1\sim r-l+1\) 的排列,有两个条件可以确定即这个区间所有的数都不重复,并且区间最大值为 \(r-l+1\)

\(1\sim n\) 都赋值一个随机数,再维护一个前缀异或和就可以快速的判定一个区间是否满足要求。

具体地,从 \(1\) 向两边扩展,维护扩展时的最大值 \(x\),如果满足 \([i,i-x+1]\) 的异或和是上面 \(x\) 的前缀异或和即为找到一个答案;可以先从 \(1\) 向右找,然后翻转 \(a\) 再进行一遍即可,最后减掉多算的 \(1\)

其他做法线段树加单调栈,分治,可以参考[2]

点击查看代码
#include <bits/stdc++.h>using i64 = long long;
using u64 = unsigned long long;std::mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n;std::cin >> n;std::vector<int> val(n + 1), a(n), c(n + 1);for(int i = 0; i < n; i += 1) {std::cin >> a[i];c[i + 1] = val[i + 1] = rng();c[i + 1] ^= c[i];}i64 ans = 0;auto work = [&]()->void{std::vector<int> p(n + 1);int max = 0;for(int i = 0; i < n; i += 1) {p[i + 1] = val[a[i]];p[i + 1] ^= p[i];if(a[i] == 1) {max = 1;}max = std::max(max, a[i]);if(i + 1 >= max && (p[i + 1] ^ p[i + 1 - max]) == c[max]) {ans += 1;}}};work();reverse(a.begin(), a.end());work();ans -= std::count(a.begin(), a.end(), 1);std::cout << ans << "\n";return 0;
}

  1. https://codeforces.com/blog/entry/67484 ↩︎

  2. https://www.cnblogs.com/tzcwk/p/Codeforces-1175F.html ↩︎

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

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

相关文章

小程序原创--基于微信开发者工具实现的猜谜游戏程序 - 教程

小程序原创--基于微信开发者工具实现的猜谜游戏程序 - 教程2025-10-25 21:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

stm32使用SPI外设读取W25Q32芯片

void SPI_GPIO_Init(void) {//SPI2-NSS PB12:PIN25 --CS//SPI2-SCK PB13:PIN26//SPI2-MISO PB14:PIN27 W25Q32:DO//SPI2-MOSI PB15:PIN28 W25Q32:DIGPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef …

Avjinder Singh Kaler | 数量遗传学基础

研究对象与核心思想• 数量遗传学研究数量性状(如身高、产量等连续变异性状)的遗传规律。 • 特点:受多基因控制,且环境效应显著。单基因模型基础• 单基因模型是数量遗传理论的起点,假设一个基因位点有两个等位基…

鲁东大学提出可解释的自适应集成机器学习全基因组选择算法用于小麦产量性状关键SNPs筛选

研究背景 全基因组选择(genomic selection, GS)是现代分子育种中的一项重要技术,作为一种强大的机器学习GS方法,堆叠集成学习(stacking ensemble learning, SEL)有效地融合了不同模型(基学习器)的优势,以精确…

台球厅收银台押金原路退回系统押金预授权—东方仙盟 - 详解

台球厅收银台押金原路退回系统押金预授权—东方仙盟 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

数论专题小记

我的数论以前一只因为对数字的恐惧而搁置,准备这几天补回来 /kk。 狄利克雷卷积&莫比乌斯反演我们定义 狄利克雷卷积 这种运算是把两个数轮函数 \(f,g\) 卷成另一个函数 \(t\),其中 \(t\) 满足: \(\ \ \ \ \ \ …

ReactUse 与ahook对比 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

机械臂和相机的9点标定原理

9点标定到底怎么工作的? 这个问题困惑了我很久,虽然想海康VisionMaster 和Halcon 这种软件都提供了很好用的工件,但是最好懂原理,这样才不仅能做项目,还能做好项目。 最近好好研究了一下,感觉是搞清楚了,就记录…

遗传改良中的核心技术:交配设计

分享一则报告,系统总结了植物育种中常用的交配设计(Mating Designs)方法。定义与目的定义:交配设计是指为产生后代而在植物群体间有计划的杂交方案。目的:理解性状或行为的遗传控制机制;为作物品种开发提供基础群…

语言是火,视觉是光:论两种智能信号的宿命与人机交互的未来 - 教程

语言是火,视觉是光:论两种智能信号的宿命与人机交互的未来 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

书籍推荐 | 《数量遗传学》(王建康)

数量遗传学是智能育种必学课程,这里推荐一本由中国农科院作物科学研究所王建康老师主编的教材。本书系统介绍群体遗传与数量遗传的基本理论及其在动植物育种中的应用。全书分群体遗传、数量遗传、育种应用和基因定位四…

Plant Com | 一种新的多源数据(基因组、表型和跨环境)融合的基因组预测框架-GPS

基因组选择(GS)和表型选择(PS)被广泛用于加速植物育种。然而,在处理处理复杂性状时,这两种选择方法的准确性、稳健性和可转移性尚未得到充分探索。近日,南京农业大学丁艳锋团队在Plant Communications发表题为G…

分享二个实用正则

正则表达式是一种用于匹配和操作文本的强大工具。它由一系列字符和特殊字符组成,用于描述要匹配的文本模式。最近看到二个我觉得很实用的正则使用方式,一起来看看吧前言 正则表达式(Regular Expression,简称regex或…

国际水稻研究所推出 AI 驱动的全球杂交水稻育种与亲本筛选数字平台

菲律宾洛斯巴诺斯(2025 年 2 月 26 日)——国际水稻研究所(IRRI)正式发布全新 AI 驱动数字平台,可显著加速全球杂交水稻育种与亲本筛选工作,通过推广高产且气候智能型杂交水稻,为粮食安全与可持续农业作出贡献。…

《程序员修炼之道:从小工到专家》笔记1

1核心身份认同:本书开篇即定义了“注重实效的程序员”的形象。我们不仅是代码的搬运工,更是项目的看护人和利益的守护者。我们勇于承担责任,而不是找借口。 2两大核心哲学: “我的源码让猫给吃了”:这是一种反讽。…

深入解析:UNIX下C语言编程与实践3-Vi 编辑器从入门到精通:快捷键使用与高效编辑技巧

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

科普报告:分子标记辅助选择(MAS)育种

分享一则由埃及农业基因工程研究所(AGERI)的Dina El-Khishin教授撰写《Marker Assisted Selection(MAS,标记辅助选择)》的报告,系统介绍了分子标记在植物育种中的应用,特别是如何利用MAS技术应对气候变化背景下…

实用指南:【ansible/K8s】K8s的自动化部署源码分享

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF1896F

题目大意: 有一个长度为 \(2n\) 的 \(01\) 序列 \(a\),你可以对他进行一下操作(不超过10步)。 输出一个长度为 \(2n\) 的括号匹配字符串 \(s\),假设每个左括号 \(i\) 与右括号 \(p_{i}\) 匹配,那么将 \(a\) 中 \…

作物遗传育种中的多亲本互交群体(MAGIC)

MAGIC群体简介 植物遗传研究的重要优势是遗传群体构建的便利。传统上用于遗传作图的主要有基于连锁分析的双亲群体和基于关联分析的自然群体和多亲群体。但由于双亲群体的遗传背景狭窄,可定位的 QTL 有限,自然群体存…