CF补题 950-Div.3

news/2025/1/7 7:49:12/文章来源:https://www.cnblogs.com/dianman/p/18653389

CF补题 950-Div.3-20250102

Dashboard - Codeforces Round 950 (Div. 3) - Codeforces

A:

题目大意:给出一个字符串,要求重复的字母必须 \(\ge m\) ,求缺失字母总个数

#include <iostream>
#include <map>
using namespace std;map<char, int> mp;int main()
{int T;cin >> T;while (T--){int n, m;int ans = 0;char a;cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a;mp[a]++;}for (char i = 'A'; i <= 'G'; i++) {if (m - mp[i] >= 0)ans += m - mp[i];}cout << ans << endl;mp.clear();}
}

map 存储字符串中每个字母的个数,最后计算需要增添的字母总个数

B:

题目大意:给出一个序列,标记其中一个元素,从大到小排序后,前 \(k\) 个元素是否能包含这个标记的元素

#include <iostream>
using namespace std;int a[105];
int fa;bool cmp(int a, int b) {return a > b;
}int main()
{int T;cin >> T;while (T--){memset(a, 0, sizeof a);int n, f, k;cin >> n >> f >> k;for (int i = 1; i <= n; i++) {cin >> a[i];if (i == f) fa = a[i];}sort(a + 1, a + n + 1, cmp);if (a[k] > fa) cout << "NO" << endl;else if (a[k] < fa || (a[k] == fa && a[k + 1] < fa)) cout << "YES" << endl;else cout << "MAYBE" << endl;}
}

sort 从大到小排序,判断前 \(k\) 个元素是否能包含 \(fa\)

  • \(k\) 个元素的值小于 \(fa\) ,绝对包含
  • \(k\) 个元素的值大于 \(fa\) ,绝对不包含
  • \(k\) 个元素的值等于 \(fa\) ,存在两种可能
    • 值为 \(fa\) 的元素只有一个,那么肯定包含 a[k] == fa && a[k + 1] < fa
    • 值为 \(fa\) 的元素不止一个,有可能包含

C:

题目大意:给定两个序列a,b,再给定一个修改序列d,问能否通过修改序列使得第一个序列变为第二个序列

\((c_i,d_i)\) 表示 d 序列中的第 \(c_i\) 项能把 a 中一个元素变为 \(d_i\)必须依次执行 d 的变化操作

#include <iostream>
#include <map>
using namespace std;int a[200010];
map<int, int> b, mp;int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--){bool flag = 0;int n,cnt=0;cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];int tb;for (int i = 1; i <= n; i++) {cin >> tb;b[tb]++;if (tb != a[i]) {mp[tb]++;cnt++;}}int m, d;cin >> m;for (int i = 1; i <= m; i++) {cin >> d;if (mp[d]) {mp[d]--;cnt--;}if (i == m && !b[d]) flag = 1;}if (cnt|| flag == 1) cout << "NO" << endl;else cout << "YES" << endl;mp.clear();b.clear();}
}

map 来存 bmp 数组,mp 数组用来 记录那些元素需要发生改变

最后输入 d ,每次判断当前的元素是否能够被用来改变 a 数组,如果能,那么mp数组内的对应元素 \(-1\)

当输入到 d 的最后一个元素时,判断这个元素是否存在 b 中,如果不在 b 中,那么我们就需要把 a 数组内的某个元素改为不需要的值,这样就不能做到把 a 完全转化成 b

多测要清空

D:
题目大意:给定一个序列a,判断删去其中一个数后能否使a的最大公约数数组 b 实现不减序列

#include <iostream>
using namespace std;int a[200010];
int b[200010];
bool l[200010];
bool r[200010];int gcd(int x, int y) {//计算gcdreturn y == 0 ? x : gcd(y, x % y);
}int main()
{int T;cin >> T;while (T--){int n;cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];//读入afor (int i = 1; i < n; i++) b[i] = gcd(a[i], a[i + 1]);//预处理gcd数组bl[0] = 1;for (int i = 1; i < n; i++) l[i] = l[i - 1] && b[i - 1] <= b[i];r[n] = r[n - 1] = 1;b[n] = 1e9;for (int i = n - 2; i > 0; i--) r[i] = r[i + 1] && b[i + 1] >= b[i];bool ans = l[n - 2] || r[2];for (int i = 2; i < n; i++) {int t = gcd(a[i - 1], a[i + 1]);ans |= l[i - 2] && r[i + 1] && (b[i - 2] <= t && b[i + 1] >= t);}if (ans) cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}

预处理b数组后,从数组两侧进行扫描,判断b数组的什么位置开始,是一段完整的不减序列

  • l从左侧开始扫描,当 b[i] 小于 b[i-1] 时说明截至到i,前面的序列都不减
  • r从右侧开始扫描,当 b[i] 大于 b[i+1] 时说明截至到i ,之后的序列都不减

可以删去一个数a[i],这个数会影响到 gcd(a[i-1],a[i])gcd(a[i],a[i+1])

判断删去 a[i] 是否合理时,需要判断 l[i-2]r[i+1] 是否都处于不减区间内(必要条件)

同时还需要判断 b[i - 2] <= t && b[i + 1] >= t 删去的这个数能否和前后构成不减序列

为什么不枚举 a 数列的两个端点呢?

这是因为端点的影响在 bool ans = l[n - 2] || r[2]; 这一步已经做出了判断

  • l[n - 2]:这个条件检查了如果移除数组 a 的最后一个元素 a[n-1],剩余数组的最大公约数序列是否非递减

  • r[2]:这个条件检查了如果移除数组 a 的第一个元素 a[1],剩余数组的最大公约数序列是否非递减

例如 2,4,8,1,这个序列,b数组就为 2,4,1

l = {1, 1, 1, 0, 0}
r = {0, 0, 0, 1, 1}
ans = 1||0 

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

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

相关文章

第十五周学习总结

学期2024-2025-1 学号20241414 《计算机基础与程序设计》第十五周学习总结 作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第一周作业这个作业的目标 课程总结作业正文 本博客链接每周作业链接汇总整体评价…

【ADB基础】ADB及Monkey测试

什么是monkey Monkey 是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试。主要是为了测试app是否存在无响应和崩溃的情况。 monkey命令说明monkey 测试命令使用及详细说明 常用命令 语法:adb shell monkey -p 包名…

20241314 《计算机基础与程序设计》课程总结

20241314 《计算机基础与程序设计》课程总结每周作业链接汇总第一周课程概论 工业革命与浪潮之巅 信息与信息安全 计算机系统概论 计算机安全 计算的限制思维作业第二周课程概论 数字化与信息安全第三周课程概论 数字逻辑门 数据类型 冯诺依曼体系第四周课程概论 计算机系统 计…

同硕计算机专业:统考+课程+源码学习资料全部免费送!

考研之路,道阻且长。对于计算机专业的学子来说,备考之路更是充满挑战。为了帮助广大考生高效备战,我在此精心整理了一套同硕计算机专业统考历年真题和复习重点、专业课程学习和相关源码资料,并免费分享给大家!我的全部学习资料都放在那里,后续我还会增加资料分享放在那里…

20241316 《计算机基础与程序设计》课程总结

20241316 《计算机基础与程序设计》课程总结第一周作业:浏览教材并提出问题第二周作业: 自学教材计算机科学概论(第七版)第1章并完成云班课测试 《C语言程序设计》第1章并完成云班课测试第三周作业:计算机科学概论(第七版)第2章,第3章 并完成云班课测试第四周作业:学习…

Windows环境下反弹shell各类姿势

在渗透测试过程中我们有时候需要通过Windows平台来反弹shell到我们的VPS主机以及CS端,那么这个过程中我们就需要借助Windows平台内置的可执行程序来执行命令,其中首选的就是powershell,本篇文章我们主要介绍如何通过Windows平台中如何通过powershell来反弹shell操作。 power…

集成运算放大器的简单介绍

集成运算放大器是一种具有很高放大倍数的多级直接耦合放大电路。是发展最早、应用最广泛的一种模拟电路。 集成电路是把整个电路的各个元件以及相互之间的连接同时制造在一块半导体芯片上,组成一个不可分点整体。 集成电路的特点:体积小,重量轻、功耗低、可靠性高、成本低、…

利用huggingface尝试的第一个简单的文本分类任务

` 这是一个简单的文本分类任务,基本的流程步骤还是挺清晰完整的,和之前那个简单的cnn差不多, 用到了transformers包,还需用到huggingface的模型rbt3, 但是好像连接不上``遇到的问题: 1.导入的包不可用,从AutoModelForTokenClassification换成了AutoModelForSequenceC…

【嵌入式编程】内存分布

一、内存分布图在操作系统中,内存被组织和管理以支持进程的运行。以下是一些常见的内存分布概念: 【内核空间】:操作系统内核使用的内存区域,用于存储内核代码、数据结构和进程控制块(PCB)。【用户空间】:存储用户的代码。未初始化变量区(.bss):存放未初始化的全局变量…

北京健康证(立水桥地铁站附近)

体检:记得带身份证就可以,最好自带一支笔,用他的笔要排队,我买的是96的,带培训证的。 下面这个表只填:身份证号,手机号,姓名就可以,类别、是否培训以交钱时候前台登记的为准,照片也不采集,直接用身份证上的相片

北京健康证

体检:记得带身份证就可以,我买的是96的,带培训证的。 下面这个表只填:身份证号,手机号,姓名就可以,类别以交钱时候前台登记的为准,照片也不采集,直接用身份证上的相片

anaconda安装与环境配置

一、Anaconda简介 ​ Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包,涵盖了数据科学领域常见的 Python 库,并且自带了专门用来解决软件环境依赖问题的 conda 包管理系统。主要是提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、…