Codeforces Round #848 (Div. 2)(A~D)
A. Flip Flop Sum

给出一个只有1和-1的数组,修改一对相邻的数,将它们变为对应的相反数,修改完后数组的和最大是多少。
思路:最优的情况是修改一对-1,其次是一个1一个-1,否则修改两个1。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 1e5 + 5;
int t, n;
int a[N];int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n;for(int i = 1; i <= n; i ++) {std::cin >> a[i];}bool flag = false;int ans = 0;for(int i = 1; i < n; i ++) {if(a[i] == -1 && a[i + 1] == -1) {a[i] = 1, a[i + 1] = 1;flag = true;break;}}if(flag) {for(int i = 1; i <= n; i ++) {ans += a[i];}std::cout << ans << '\n';continue;}for(int i = 1; i < n; i ++) {if(a[i] + a[i + 1] == 0) {flag = true;break;}}if(flag) {for(int i = 1; i <= n; i ++) {ans += a[i];}std::cout << ans << '\n';continue;}a[1] = -a[1], a[2] = -a[2];for(int i = 1; i <= n; i ++) {ans += a[i];}std::cout << ans << '\n';}return 0;
}B. The Forbidden Permutation

给出一个permutation p,给出一个数组a和一个数字d,定义pos(a[i]) = x (a[i] - p[x]),定义一个not good数组满足pos(a[i]) < pos(a[i + 1]) <= pos(a[i]) + d,每次修改可以选择p内两个相邻的数,交换两数位置。求想要达到一个good数组,最少需要修改几次。
思路:贪心求解即可。对于满足条件的相邻两数,不需要操作;对于不满足条件的两个数,可以有两种修改操作:(1)两数位置交换;(2)移动两数使得距离大于等于d,每次在满足条件的情况下采用最小值即可。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 1e5 + 5;
int t, n, m, d;
int a[N], p[N];int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n >> m >> d;d ++;std::map<int, int> mp;for(int i = 1; i <= n; i ++) {std::cin >> p[i];mp[p[i]] = i;}for(int i = 1; i <= m; i ++) {std::cin >> a[i];}int ans = n;for(int i = 2; i <= m; i ++) {int fir = mp[a[i - 1]];int sec = mp[a[i]];if(fir > sec) ans = std::min(0, ans);else {int cnt = std::max(0, (d - (sec - fir)));if(fir - 1 + n - sec >= cnt)ans = std::min(ans, cnt);ans = std::min(ans, sec - fir);}}std::cout << ans << '\n';}return 0;
}C. Flexible String

给出长度为n的两个字符串a和b,对a进行修改,每次可以将其中一个字符替换为任意的字符,最多修改k种不同的字符,问修改完后最多有多少区间[l, r]满足a[l, r] = b[l, r]。
思路:因为a中最多有10中字符,可以想到采用二进制枚举,枚举修改k种字符,然后对于修改的区间计算即可,具体细节看代码。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
#define int long long
const int N = 1e5 + 5;
int t, n, k;
std::string a, b;signed main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n >> k;std::cin >> a >> b;a = ' ' + a, b = ' ' + b;std::map<char, int> mp;int cnt = 0;for(int i = 1; i <= n; i ++) {if(!mp[a[i]])mp[a[i]] = ++ cnt;}int ans = 0;for(int o = 0; o < (1 << cnt); o ++) {int cnt1 = __builtin_popcount(o);if(cnt1 > k) continue;int res = 0;for(int i = 1; i <= n; i ++) {int j = i;while(j <= n && (a[j] == b[j] || mp[a[j]] && (o >> (mp[a[j]] - 1) & 1)))j ++;res += (j - i) * (j - i + 1) / 2;i = j;}ans = std::max(res, ans);}std::cout << ans << '\n';}return 0;
}os:距离1600还差点啊,,这个二进制枚举没想到QAQ
D. Flexible String Revisit

给出a和b两个01串,随机修改a中的0和1为相反的数,问使得a等于b的期望修改次数是多少。
思路:严格鸽!
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int mod = 998244353;
const int N = 1e6 + 5;
int t, n;
std::string a, b;struct ModInt {int MD = mod;int x;ModInt(ll x = 0) : x(x % MD) {}int get() { return x; }ModInt operator + (const ModInt& that) const { int x0 = x + that.x; return ModInt(x0 < MD ? x0 : x0 - MD); }ModInt operator - (const ModInt& that) const { int x0 = x - that.x; return ModInt(x0 < MD ? x0 + MD : x0); }ModInt operator * (const ModInt& that) const { return ModInt((long long)x * that.x % MD); }ModInt operator / (const ModInt& that) const { return *this * that.inverse(); }void operator += (const ModInt& that) { x += that.x; if (x >= MD) x -= MD; }void operator -= (const ModInt& that) { x -= that.x; if (x < 0) x += MD; }void operator *= (const ModInt& that) { x = (long long)x * that.x % MD; }void operator /= (const ModInt& that) { *this = *this / that; }ModInt inverse() const {int a = x, b = MD, u = 1, v = 0;while(b) {int t = a / b;a -= t * b; std::swap(a, b);u -= t * v; std::swap(u, v);}if(u < 0) u += MD;return u;}
};using mint = ModInt;struct node {mint a, b;
} f[N];node operator + (node L, node R) {return {L.a + R.a, L.b + R.b};
}node operator + (node L, mint R) {return {L.a, L.b + R};
}node operator - (node L, node R) {return {L.a - R.a, L.b - R.b};
}node operator - (node L, mint R) {return {L.a, L.b - R};
}node operator / (node L, mint R) {return {L.a / R, L.b / R};
}node operator * (node L, mint R) {return {L.a * R, L.b * R};
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n >> a >> b;int cnt = 0;for(int i = 0; i < n; i ++) {cnt += (a[i] != b[i]);}f[0] = {0, 0};f[1] = {1, 0};for(int i = 2; i <= n; i ++) {f[i] = (f[i - 1] - mint{1} - f[i - 2] * mint{i - 1} / n) /((mint{n} - (i - 1)) / n);}node xx = f[n] - f[n - 1];mint x = (mint{1} - xx.b) / xx.a;std::cout << (f[cnt].a * x + f[cnt].b).get() << '\n';}return 0;
}os:第一次用这个取模板子欸!
相关文章:
Codeforces Round #848 (Div. 2)(A~D)
A. Flip Flop Sum给出一个只有1和-1的数组,修改一对相邻的数,将它们变为对应的相反数,修改完后数组的和最大是多少。思路:最优的情况是修改一对-1,其次是一个1一个-1,否则修改两个1。AC Code:#i…...
第十三届蓝桥杯Java B 组国赛 C 题——左移右移(AC)
目录1.左移右移1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围6.原题链接2.解题思路3.Ac_code1.左移右移 1.题目描述 小蓝有一个长度为 NNN 的数组, 初始时从左到右依次是 1,2,3,…N1,2,3, \ldots N1,2,3,…N 。 之后小蓝对这个数组进行了 MMM 次操作, 每次…...
第14篇:系列二—Java抽象类/接口/枚举
目录 1、继承的定义(Inheritance) 2、继承的优点 2.1 易维护性 2.2 复用性 2.3 条理性...
深入浅出C++ ——哈希
文章目录前言一、unordered系列关联式容器1. unordered_map2. unordered_set二、哈希1. 哈希概念2. 哈希冲突3. 哈希函数4. 哈希冲突解决方法三、模拟实现unordered系列容器1. 哈希表的改造2. 模拟实现 unordered_set3. 模拟实现 unordered_map前言 在C11中,STL又提…...
Tina_Linux_系统裁剪_开发指南
文章目录Tina_Linux_系统裁剪_开发指南1 概述2 Tina系统裁剪简介2.1 boot0裁剪2.2 uboot裁剪2.3 内核裁剪2.3.1 删除不使用的功能2.3.2 删除不使用的驱动2.3.3 修改内核源代码2.3.3.1 size工具.2.3.3.2 ksize.py脚本2.3.3.3 nm命令2.3.3.4 kernel压缩方式.2.4 文件系统裁剪.2.4…...
算法刷题打卡第99天:至少在两个数组中出现的值
至少在两个数组中出现的值 难度:简单 给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 元素各不相同的 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 示例 1: 输入&…...
线程池面试题
1. 什么是线程池?为什么要使用线程池? 线程池是一种用于管理线程的技术,它可以在应用程序中重复使用一组线程来执行多个任务。线程池的优点包括提高应用程序的性能和可伸缩性、避免线程创建和销毁的开销、避免线程过多导致系统负担过重等。线…...
【学习笔记】NOIP爆零赛5
说实话是不想补题的。因为每一道题都贼难写,题解又通篇写着显然,然后自己天天搞竞赛又把注意力搞差了,调一道题又调半天,考试的题又难的要死 不会正解 ,部分分又写挂了 可能心态崩了就是从那场t1t1t1签到题考高精度数位…...
【数据结构】时间复杂度
🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…...
vector的基本使用
目录 介绍: vector iterator 的使用 增删查改 增(push_back insert): 删(pop_back erase): swap: vector的容量和扩容: 排序(sort): 介绍ÿ…...
剑指 Offer 55 - I. 二叉树的深度
摘要 剑指 Offer 55 - I. 二叉树的深度 一、深度优先搜索 如果我们知道了左子树和右子树的最大深度l和r,那么该二叉树的最大深度即为:max(l,r)1。 而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计…...
Bean的生命周期和作用域
Bean的生命周期Bean的执行流程:Bean 执行流程:启动Spring 容器 -> 实例化 Bean(分配内存空间,从无到有)-> Bean 注册到 Spring 中(存操作) -> 将 Bean 装配到需要的类中(取…...
TestNG和Junit的区别,测试框架该如何选择?
要想知道两个框架的区别,首先分别介绍一下两个框架。 TestNG是一个java中的开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了JUnit4整个核心的功能,但引入了一些新的功能,使其功能更强大,使用更…...
MySQL安全登录策略
MySQL密码复杂度策略设置 MySQL 系统自带有 validate_password 插件,此插件可以验证密码强度,未达到规定强度的密码则不允许被设置。MySQL 5.7 及 8.0 版本默认情况下貌似都不启用该插件,这也使得我们可以随意设置密码,比如设置为…...
优化模型验证23:带无人机停靠站的卡车无人机协同配送车辆路径问题、模型、gurobipy验证及结果可视化
带中转hub的卡车无人机车辆路径问题 模型来源为:Wang Z , Sheu J B . Vehicle routing problem with drones[J]. Transportation Research Part B: Methodological, 2019, 122(APR.):350-364. 问题描述: 这篇问题研究了一个带停靠站的卡车无人机路径问题,无人机仅能从起点…...
mongoTemplate Aggregation 多表联查 排序失效问题解决
目录说明说明 接着上一个文章的例子来说:mongoTemplate支持多表联查 排序 条件筛选 分页 去重分组 在按照上一个demo的代码执行后,可能会发生排序失效的问题,为什么说可能呢?每个人负责业务不同,不可能是最简单的dem…...
什么是智慧实验室?
智慧实验室是利用现代信息技术和先进设备将实验室实现智能化和智慧化的概念。通过将各种数据、信息和资源整合在一起,实现实验室设备的互联互通,数据的实时采集、传输、处理和分析,从而提高实验室的效率、精度和可靠性。一、智慧实验室包含多…...
Python abs() 函数
Python abs() 函数Python 数字描述abs() 函数返回数字的绝对值。语法以下是 abs() 方法的语法:abs( x )参数x -- 数值表达式。返回值函数返回x(数字)的绝对值。实例以下展示了使用 abs() 方法的实例:#!/usr/bin/python print "abs(-45) …...
裸辞了,面试了几十家软件测试公司,终于找到想要的工作
上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈。 面试了几十家终于找到心仪工作 因为工作压力大、领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没…...
ShardingSphere
1.简介 1.开源的分布式数据生态项目 ShardingSphere-JDBC:轻量级Java框架ShardingSphere-Proxy:数据库代理ShardingSphere-Sidecar(规划中):Kubernetes的云原生数据库代理 2.使用版本:ShardingSphere5.1.1 1.数据库集群架构 1.出现…...
倒排索引详解
文章目录倒排索引(Inverted Index)正排索引与倒排索引实现优缺点倒排索引(Inverted Index) 倒排索引是信息检索领域最核心的数据结构,几乎所有搜索引擎(Google、Elasticsearch、Lucene)都基于它…...
瑞典隆德大学 AI 模型血检识别 5 种神经疾病
瑞典隆德大学研发的 AI 模型 ProtAIDe-Dx,可通过单次血检精准识别 5 种神经退行性疾病,准确率高、早期筛查潜力大。 一、核心信息 发表时间:2026年3月31日(《Nature Medicine》)研发团队:隆德大学 Vogel &a…...
16.2【保姆级教程】 C语言八进制+十六进制保姆级详解 _ 底层开发必吃透
🔥C语言八进制十六进制保姆级详解 | 底层开发必吃透📢 关注博主不迷路!全网最细C语言八进制、十六进制教程,从定义到实操、从转换到应用,新手零门槛上手,底层开发/面试必看!在C语言底层开发中&a…...
020驱动模型与sysfs:当你的驱动需要“见人”时
最近在调试一个车载CAN设备时遇到个怪现象:驱动能正常收发数据,但每次系统休眠唤醒后设备就丢了。查了半天发现,原来设备电源管理回调根本没被调用。老张路过我工位瞟了一眼,扔下一句话:“你这驱动没‘上户口’吧&…...
从PTA题目到项目实战:用Python和C语言两种思路重构‘插入排序’
从PTA题目到项目实战:用Python和C语言两种思路重构‘插入排序’ 算法学习常常陷入"纸上谈兵"的困境——我们能在OJ平台上AC题目,却难以将算法思想迁移到真实项目中。以插入排序为例,这道PTA基础题背后隐藏着数据处理、性能优化和语…...
QFIL线刷救砖全攻略:遇到EDL模式切换失败怎么办?附详细COM端口排查方法
QFIL线刷救砖实战指南:EDL模式切换失败的系统级解决方案 当你面对安卓设备变砖的紧急状况,线刷往往是最后的救命稻草。但就在这关键时刻,"Download Fail:Switch To EDL Fail"的红色报错突然弹出,那种从希望到绝望的落差…...
告别重复劳动,用快马ai为centos7生成自动化运维脚本提升工作效率
告别重复劳动,用快马AI为CentOS7生成自动化运维脚本提升工作效率 作为一名长期和CentOS7打交道的运维人员,我深刻体会到日常工作中那些重复性配置任务有多耗费时间。直到最近尝试用InsCode(快马)平台的AI生成功能,才发现原来这些繁琐操作都能…...
【多机器人路径规划】基于MRPP或MAPF的多机器人路径规划算法研究附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
如何在5分钟内完成Blender 3MF插件的终极安装与配置
如何在5分钟内完成Blender 3MF插件的终极安装与配置 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender 3MF插件是一款革命性的开源工具,专为3D打印工作流…...
ozz-animation工具集完整使用手册:从模型导入到动画导出
ozz-animation工具集完整使用手册:从模型导入到动画导出 【免费下载链接】ozz-animation Open source c skeletal animation library and toolset 项目地址: https://gitcode.com/gh_mirrors/oz/ozz-animation ozz-animation是一款开源C骨骼动画库和工具集&a…...
