2024 National Invitational of CCPC (Zhengzhou)(CCPC郑州邀请赛暨CCPC河南省赛)

2024 National Invitational of CCPC (Zhengzhou)

2024CCPC郑州邀请赛暨CCPC河南省赛

2024 National Invitational of CCPC (Zhengzhou)
在这里插入图片描述

B. 扫雷 1

题意:扫n轮雷,每轮开始获得一枚扫雷币,可保存,从第一轮开始,可以决定在任意轮进行任意次扫雷,但过去的轮数不能返回,第i轮需要花费 c i c_i ci枚扫雷币扫雷一次,n轮最多扫多少雷。

思路:记录一个最便宜的扫雷后缀,遇见当前后缀最便宜的就开始买。

AC code:

void solve() {int n; cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];r[n + 1] = INF;for (int i = n; i >= 1; i --) {r[i] =  min(r[i + 1], a[i]);}int cnt = 0, now = 0;for (int i = 1; i <= n; i ++) {now ++;if (a[i] == r[i]) {cnt += now / a[i];now -= (now / a[i]) * a[i];}}cout << cnt << endl;
}

F. 优秀字符串

题意:略;

思路:照着题意模拟即可;

AC code:

void solve() {int n; cin >> n;int cnt = 0;while (n --) {string s; cin >> s;if (s.size() != 5) continue;if (s[2] != s[4]) continue;bool flag = 1;for (int i = 0; i < 4; i ++) for (int j = i + 1; j < 4; j ++) {if (s[i] == s[j]) flag = 0;}if (flag) cnt ++;}cout << cnt << endl;
}

H. 随机栈

题意:给出一个空栈,还有一个操作序列,当当前操作元素不为-1时,将该元素压入栈中,否则取出一个栈中元素,取出当前栈中每个元素的概率是相同的,求最终取出元素序列为非递减的概率是多少,结果对998244353取模。

思路:模拟这个过程可以用优先队列来解决,当前栈中的元素总数为分母,当前队头的最小元素的数量即为分子,该数量可以用map来记录,计算不同分数的积并进行取模;

注意,运算过程中需要对各分数进行逆元取模运算,即分子*分母的逆元的过程不断累乘,过程中注意取模;

AC code:

int qmi(int a, int k, int p) {int res = 1;while (k) {if (k & 1) res = res * a % p;a = a * a % p;k >>= 1;} return res;
}void solve() {int n; cin >> n;map<int, int> mp;priority_queue<int, vector<int>, greater<int>> q;int x = 1, y = 1;int ans = qmi(1, MOD - 2, MOD);for (int i = 1; i <= 2*n; i ++) {cin >> a[i];} int last = -1;for (int i = 1; i <= 2*n; i ++) {if (a[i] == -1) {int t = q.top();if (last <= t) last = t;else {cout << 0 << endl;return;}int xx = mp[t], yy = q.size();int gd = gcd(xx, yy);//cout << xx << ' ' << yy <<' ' << gd << endl;ans = ((ans * xx) % MOD) * qmi(yy, MOD - 2, MOD) % MOD;mp[t] --;q.pop();} else {q.push(a[i]);mp[a[i]] ++;}}cout << ans % MOD << endl;
}

J. 排列与合数

题意:给出一个五位数字,重排后在没有前导零的情况下是否可能出现合数;

思路:预处理一下五位的合数,O1进行判断,然后DFS跑一下五位数的全排列即可;

AC code:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;typedef long long LL;
typedef pair<int, int> PII;
const int N = 2e5+10, M = 2001;
const int INF = 0x3f3f3f3f3f, MOD = 998244353;
int T;
int n, ans;
int a[N], b[N], st[10];
bool p[N];bool iprime(int x) {if (x == 1) return false;for (int i = 2; i <= x / i; i ++) {if (x % i == 0) {return true;}} return false;
}void dfs(string aim, string s) {if (ans != -1) return;if (aim.size() == 5) {int cnt = 0, tt = 10000;if (aim[0] == '0') return;for (int i = 0; i < 5; i ++) {cnt += (aim[i] - '0') * tt;tt /= 10;}if (p[cnt]) {ans = cnt;return;}return;}for (int i = 0; i < 5; i ++) {if (!st[i]) {st[i] = 1;aim += s[i];dfs(aim, s);aim.pop_back();st[i] = 0; }}
}void solve() {string s; cin >> s;for (int i = 0; i < 5; i ++) st[i] = 0;string ss = "";ans = -1;dfs(ss, s);cout << ans << endl;
}signed main() {fast();T = 1;for (int i = 1; i < 100000; i ++) {if (iprime(i)) p[i] = 1;else p[i] = 0;}cin >> T;while (T --) {solve();}return 0;
}

K. 树上问题

题意:n个结点的无根树,每个结点有一个正权值,美丽节点的定义为,以当前节点为根时,除根节点外的所有节点,其点权不小于父节点的一半,计算有多少美丽节点。

思路:

首先初始就满足x * 2 >= y的节点y一定可以为x的父节点,即有一条有向边,若两个点互相可为父节点,则这两点可以由并查集记录为同一点在图中存在;

现在统计每个点当前可能的父节点,并根据上述情况合并到同一并查集中,记录每个连通块的大小;

然后通过DFS进行记录各点的出度,出度为0的点即为可能的根节点,注意在统计过程中进行标记防止重复统计;

注意,如果存在某一点的出度大于1,则该连通图必然不可能存在美丽节点。

AC code:

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;typedef long long LL;
typedef pair<int, int> PII;
const int N = 2e5+10, M = 2001;
const int INF = 0x3f3f3f3f3f, MOD = 998244353;
int T;
int n;
int a[N], f[N], d[N];
vector<int> g[N];
map<int, int> mp, pos;int find(int x) {if (f[x] != x) f[x] = find(f[x]);return f[x];
}void dfs(int u, int v) {for (auto t : g[u]) {if (t == v) continue;dfs(t, u);int fu = find(u), ft = find(t);if (fu == ft) continue;if (a[t] * 2 >= a[u] && a[u] * 2 >= a[t]) continue;else if (a[t] * 2 >= a[u]) d[ft] ++;else if (a[u] * 2 >= a[t]) d[fu] ++;else d[ft] ++, d[fu] ++;}
}void solve() {cin >> n;mp.clear();pos.clear();for (int i = 1; i <= n; i ++) {cin >> a[i];f[i] = i;d[i] = 0;g[i].clear();}for (int i = 1; i < n; i ++) {int u, v; cin >> u >> v;g[u].push_back(v);g[v].push_back(u);int fu = find(u), fv = find(v);if (a[u] * 2 >= a[v] && a[v] * 2 >= a[u]) {f[f[u]] = fv;}}for (int i = 1; i <= n; i ++) {mp[find(i)] ++;}dfs(1, -1);int ans = 0;for (int i = 1; i <= n; i ++) {if (d[find(i)] > 1) {cout << 0 << endl;return;}if (d[find(i)] || pos[find(i)]) continue;pos[find(i)] ++;ans += mp[find(i)];}cout << ans << endl;
}signed main() {fast();T = 1;cin >> T;while (T --) {solve();}return 0;
}

L. Toxel 与 PCPC II

题意:总共n行代码,已知m行有bug,扫描一行需要一秒,同时处理x个bug需要 x 4 x^4 x4秒,最短多少秒可以完成;

思路:dp,在更新每个点的最短debug时间时最多不会超过同时处理30个bug;

AC code:

int qmi (int a, int k) {int res = 1;while (k) {if (k & 1) res = res * a;a = a * a;k >>= 1;} return res;
}void solve() {int n, m; cin >> n >> m;vector<int> a(m + 10), dp(m + 10, INF);dp[0] = 0;for (int i = 1; i <= m; i ++) cin >> a[i];for (int i = 1; i <= m; i ++) {for (int j = i - 1; j >= max(0LL, i - 30); j --) {dp[i] = min(dp[i], dp[j] + a[i] + qmi(i - j, 4));}}cout << dp[m] << endl;
}  

M. 有效算法

题意:给出长度为n的序列a和b,对于每个a元素进行一次操作满足|ai - x| <= k * bi的任意整数x,求出最小的非负整数k,满足至少存在一种方法的操作后所有a元素相等

思路:二分即可,对于check函数每次x都会有一个左右边界,不断缩小左右边界,x只要出现在该范围内均符合条件,若出现r>l边界的情况则直接返回false,注意二分边界,最多开到1e9,不然会炸(血的教训)。

AC code:

bool check (int k) {int l = -INF, r = INF;for (int i = 1; i <= n; i ++) {int now = k * b[i];int ll = a[i] - now, rr = a[i] + now;l = max(l, ll);r = min(r, rr);if (l > r) return false;}return true;
}void solve() {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= n; i ++) cin >> b[i];int l = 0, r = 1e9;while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << r << endl;
}

PS:有没有佬有A的写法QAQ

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

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

相关文章

27.C++的类型转换(介绍了static_cast、reinterpret_cast、const_cast、dynamic_cast的用法)

1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型转换…

JavaScript中的call、apply和bind方法(2)

JavaScript中的call、apply和bind方法是用于改变函数执行上下文和预先设置参数的强大工具。它们在编写可维护和优雅的代码时起到了重要的作用。本文将介绍这些方法的原理和使用场景&#xff0c;并展示如何将它们应用于你的代码中&#xff0c;使其更加漂亮。 call方法的原理和使…

STM32 CANFD 基础知识留档

讲得比较细的文章但可能有问题自行判定 附1 附2 前言 CAN2.0 协议中数据段波特率和仲裁段波特率默认是一致&#xff0c;因此只需要关注传输波特率即可 CANFD 协议是向下兼容 CAN2.0 的数据通讯&#xff0c;因此实际使用中需要配置 STM32H7 系列支持的标准是 Compliant with …

大语言模型中上下文长度扩展技术的内容、原因和方式-综述

24年1月阿联酋科技创新研究院、孟加拉国伊斯兰科技大学、斯坦福大学、亚马逊公司和南卡大学AI研究院的论文“The What, Why, and How of Context Length Extension Techniques in Large Language Models – A Detailed Survey“。 LLM通常面临上下文长度外推方面的限制。 理解…

C++11 线程池:轻量级高并发解决方案

C11 线程池&#xff1a;轻量级高并发解决方案 线程池&#xff08;Thread Pool&#xff09;是一种线程管理的机制&#xff0c;它包含了多个预先创建的线程&#xff0c;用于执行多个任务&#xff0c;这些任务被放入任务队列中等待执行。 满足我们的生产者和消费者模型。 线程…

一文带你快速了解GPT-4o!内含免费使用指南!

一、GPT-4o简介 北京时间5月14日&#xff0c;OpenAI举行春季发布会。OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、…

常用限流方式

1. 令牌桶算法&#xff08;Token Bucket&#xff09; 令牌桶算法是一种常用的限流算法&#xff0c;它通过维护一个固定容量的令牌桶&#xff0c;以限制单位时间内通过的请求数量。当请求到达时&#xff0c;会从令牌桶中获取一个令牌&#xff0c;如果令牌桶中没有令牌&#xff…

如何使用Python进行网页爬取

Python爬虫案例可以有很多种&#xff0c;但我会为你提供一个简单的案例&#xff0c;该案例使用Python的requests库来爬取一个网页的内容&#xff0c;并使用BeautifulSoup库来解析HTML并提取特定的信息。 假设我们要从某个新闻网站&#xff08;例如&#xff1a;示例网站&#x…

电力场景设备漏油检测数据集VOC+YOLO格式338张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;338 标注数量(xml文件个数)&#xff1a;338 标注数量(txt文件个数)&#xff1a;338 标注类别…

第N1周:one-hot编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 1.什么是one-hot编码 One-Hot编码是一种常用于机器学习中的特征编码方式&#xff0c…

Qt---项目的创建及运行

一、创建第一个Qt程序 1. 点击创建项目后&#xff0c;选择项目路径以及给项目起名称 名称&#xff1a;不能有中文、不能有空格 路径&#xff1a;不能有中文路径 2. 默认创建有窗口类myWidget&#xff0c;基类有三种选择&#xff1a;QWidget、QMainWindow、QDialog 3. m…

Redis为什么快

用了那么久的redis&#xff0c;突然意识到这个问题答不上来&#xff0c;只知道内存数据库&#xff0c;内存的读写性能快于磁盘。 1. 内存存储 Redis 是一个基于内存的数据库&#xff0c;它将所有的数据都保存在内存中&#xff0c;这使得读取的速度非常快。内存读写速度远超于…

#自学习# 记一次py脚本打开浏览器页面

在项目总结中&#xff0c;遇到系统后台利用浏览器拉起一个已知路径页面的需求&#xff0c;趁着机会整理下。实现起来比较简单&#xff0c;浏览器默认谷歌。 一、技术原理 Selenium&#xff1a;Selenium 是一个用于自动化 Web 浏览器的工具&#xff0c;可模拟用户在浏览器中的各…

socket接口定义范围及操作

Socket接口&#xff0c;也称为套接字接口&#xff0c;是用于实现网络通信的一种编程接口。它定义了一系列的操作和函数&#xff0c;允许应用程序通过网络进行数据传输。 Socket接口不仅仅局限于特定的操作系统或网络协议&#xff0c;而是在多种网络环境中通用&#xff0c;包括但…

Python面试题【数据结构和算法部分101-130】

Python面试题【数据结构和算法部分101-130】 Python面试题【数据结构和算法部分101-130】 Python面试题【数据结构和算法部分101-130】 问题&#xff1a;如何在Python中实现二分查找&#xff1f; 答案&#xff1a; def binary_search(arr, target):low, high 0, len(arr) - 1…

奔向光明阿波罗(五)

下半场的艰难曙光 有“中国无人驾驶黄埔军校”之称的百度&#xff0c;最初的雄心是给未来的智能汽车安上一颗“百度之心”&#xff0c;取得类似于“Intel Inside“的品牌强强联合效果。阿波罗希望为汽车行业的玩家提供一个“开放、完整、安全”的开源平台&#xff0c;帮助他们结…

正则表达式中的$分组使用示例

正则表达式中的 $ 符号通常用于表示字符串的结束位置&#xff0c;但当你在替换操作或者某些特殊上下文中提到 $ 后跟数字&#xff08;如 $1, $2, etc.&#xff09;&#xff0c;这并不表示结束位置&#xff0c;而是引用之前正则表达式捕获组的内容。 以下是使用 $ 引用捕获组的…

计算机视觉与深度学习实战:以Python为工具,基于块匹配的全景图像拼接

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:计算机视觉与深度学习实战-以MATLAB和Python为工具_基于块匹配的全景图像拼接_项目开发案例教程.pdf 计算机视觉作为人工智能领域的一个重要分支,旨在…

成都百洲文化传媒有限公司怎么样?靠谱吗?

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度蓬勃发展。作为这一变革的积极参与者和推动者&#xff0c;成都百洲文化传媒有限公司以其专业的电商服务&#xff0c;正逐渐成为行业内的佼佼者。 一、公司简介 成都百洲文化传媒有限公司自成立以来&#xff…

邦芒宝典:离职前一定要做的几件事帮你刷爆好感

​​这个问题&#xff0c;关键还是要看这位有本事的员工的职业素养如何。虽说工有本事的员工往往都会具备比较高的职业素养&#xff0c;比如强专业能力、强沟通、强执行、正确的价值观与职业操守等等&#xff0c;但也可能有些人能力是不错&#xff0c;但素养比较低&#xff0c;…