Codeforces Global Round 29 (Div. 1 + Div. 2) A~E

news/2025/9/25 20:55:28/文章来源:https://www.cnblogs.com/Kescholar/p/19111775

A - Shortest Increasing Path

思维。

\(y>x\) 时,可以走 \(x\rightarrow y\) 两步即可;\(x \ge y + 2\) 时,可以走 \(1 \rightarrow y \rightarrow y + 1\) 三步即可,其余无解。

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

B - Multiple Construction

构造。

打表发现的规律,可以诸如 \(n,n-1,...,1,n,1,2,...,n-2,n-1\) 这样去构造即可。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;cin >> n;vector<int> pos(2 * n + 1), cnt(n + 1), p(2 * n + 1);auto dfs = [&](auto & self, int idx, int x)->void{if (cnt[x] > 1 && (idx - pos[x]) % x != 0) {return;}if (idx > 2 * n) {for (int i = 1; i <= 2 * n; i += 1) {cout << p[i] << " \n"[i == 2 * n];}return;}pos[x] = idx;for (int i = 1; i <= n; i += 1) {if (cnt[i] > 1) continue;cnt[i] += 1;p[idx] = i;self(self, idx + 1, i);cnt[i] -= 1;}};// for (int i = 1; i <= n; i += 1) {// 	dfs(dfs, 1, i);// }for (int i = n; i >= 1; i -= 1) {cout << i << " ";}cout << n << " ";for (int i = 1; i <= n - 1; i += 1) {cout << i << " \n"[i == n - 1];}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

C - Rabbits

分类讨论。

之前写的,有点忘了大致就是维护最后一个 \(0\) 是否可以自由选择方向,如果是第一个 \(0\) 或者一长串的 \(0\) 的最后一个,那就都可以自由选,如果是由自由的 \(0\) 转移过来的,那当前 \(0\) 也是可以自由选。

不能自由选的情况就是,左边的没有相隔为 \(2\)\(0\),或者左边的 \(0\) 已经被锁定了,那就只能看右边存不存在合法 \(0\) 去配对。

这题细节有点多,当时写了个对拍一边拍一边改,还好一发过了。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;cin >> n;string s;cin >> s;s = " " + s;vector<int> pos;for (int i = 1; i <= n; i += 1) {if (s[i] == '0') {pos.push_back(i);}}if (pos.size() == 1) {if (pos[0] == 1 || pos[0] == n) {cout << "YES\n";} else {cout << "NO\n";}return;}int lst = 0;for (int i = 0; i < pos.size(); i += 1) {int j = i;while (j + 1 < pos.size() && pos[j + 1] == pos[j] + 1) {j += 1;}bool f = 0;if (i - 1 >= 0 && pos[i - 1] == pos[i] - 1) {f = 1;}if (j - i + 1 + f > 1) {lst = 1;i = j;continue;} else {if (pos[i] == 1 || pos[i] == n) {lst = 1;continue;}if (i - 1 >= 0 && pos[i] - pos[i - 1] == 2 && lst) {lst = 1;} else if (i + 1 < pos.size() && pos[i + 1] - pos[i] == 2) {i += 1;lst = 0;} else {cout << "NO\n";return;}}}cout << "YES\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

D - Game on Array

思维。

值为偶数的,显然两边同时加减得到的贡献是一样的,那么想让自己得到的更多,显然是去争取奇数值的,所以可以把奇数取出来按照出现的次数排序,Ailce 和 Bob 轮流取,最后算一下偶数的贡献即可。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;cin >> n;map<int, int> mp, s;for (int i = 1; i <= n; i += 1) {int x;cin >> x;mp[x] += 1;}vector<array<int, 2>> a;for (auto &[x, y] : mp) {if (x & 1) {a.push_back({y, x});} else {s[x] += y;}}sort(a.begin(), a.end(), greater<>());i64 A = 0, B = 0;for (int i = 0; i < a.size(); i += 1) {auto [y, x] = a[i];if (i % 2 == 0) {A += y;} else {B += y;}if (x - 1 > 0) {s[x - 1] += y;}}for (auto &[x, y] : s) {i64 res = 1LL * x * y / 2;A += res, B += res;}cout << A << " " << B << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

E. Maximum OR Popcount

位运算,贪心。

大部分人应该都能想到只要求出每个一的最小花费,然后对于每次询问,去找能满足多少个一就行了。

但是在求第 \(i\) 位的最小花费时,后面就可能不满足全 \(1\) 的条件了,比如 \(2|1|10|6=1111_2\),把 \(10\) 变成 \(16\) 后,第 \(3\) 位的 \(1\) 就没有了,变成 \(2|1|16|6=10111_2\)。对于这种情况,我们需要继续贪心的往后求每一位都变为 \(1\) 的代价,这才能确保 \(1\) 的个数增加的情况下花费最少。

至于为什么每次都求一遍把 \(i\sim 0\) 全置为 \(1\) 得到增加第 \(i\) 位的代价是最小的,这里有证明[1]

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n, q;cin >> n >> q;int d = 0;vector<int> a(n + 1);for (int i = 1; i <= n; i += 1) {cin >> a[i];d |= a[i];}vector<int> b{0};for (int j = 0; j <= 30; j += 1) {if (d >> j & 1) {continue;}int cost = b.back();for (int k = j; k >= 0; k -= 1) {int mi = INT_MAX, ok = 0, t = -1;for (int i = 1; i <= n; i += 1) {if (a[i] >> k & 1) {ok = 1;break;}int p = ((1 << k + 1) - 1) & a[i];int need = (1 << k) - p;if (need < mi) {mi = need, t = i;}}if (ok) {continue;}cost += mi;a[t] >>= k;a[t] <<= k;a[t] |= 1 << k;}b.push_back(cost);}int base = __builtin_popcount(d);while (q--) {int x;cin >> x;int t = 0;while (t + 1 < b.size() && b[t + 1] <= x) {t += 1;}cout << base + t << "\n";}}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

  1. [https://codeforces.com/blog/entry/146633] ↩︎

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

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

相关文章

AI 低代码平台:不止于 “快”,解码技术融合的深层逻辑

在企业数字化转型的赛道上,“AI + 低代码” 的组合正从概念热潮转向实用工具,但多数人对其认知仍停留在 “拖拽组件 + 自动生成代码” 的浅层理解。事实上,这种技术融合本质上是 “工具层标准化” 与 “智能层通用化…

实用指南:【知识拓展Trip Five】寄存器

实用指南:【知识拓展Trip Five】寄存器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

动态内存管理(2) - 详解

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

计算机视觉(opencv)实战二十七——目标跟踪 - 教程

计算机视觉(opencv)实战二十七——目标跟踪 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

P8367 [LNOI2022] 盒

传送门。 神仙题,做了半年。 整体是不好做的,考虑每个\(w_i\)对整体的贡献。记\(s_i=\sum_{i=1}^{i}a_i\),\(d_i=\sum_{i=1}^{i}b_i\),当且仅当\(s_i\neq d_i\)时,才会有货物流通\(i\)号点。所以总体的答案为: \…

蓝桥杯 2025 省 B 题:画展布置 - 题解笔记

蓝桥杯 2025 省 B 题:画展布置 - 题解笔记.md 一、题目核心信息 1. 问题描述 给定 N 幅画作的艺术价值数组 A,需从其中挑选 M 幅并排列成序列 B(长度为 M),目标是最小化评价指标 L,L 的定义为: \[L = \sum_{i=1…

二维坐标下的运算

在二维图中,常常遇到一些需要大量坐标运算的题目,这时可以封装一个Point类,实现坐标高效运算。 // #define LOCAL #include<iostream> #include<queue> #include<map> using namespace std; #define…

凡科建站怎么导出网页网站优化方案和实施

有一个数据库应用程序存在过多的解析问题&#xff0c;因此需要找到产生大量硬解析的主要语句。 什么是硬解析 Oracle数据库中的硬解析&#xff08;Hard Parse&#xff09;是指在执行SQL语句时&#xff0c;数据库需要重新解析该SQL语句&#xff0c;并创建新的执行计划的过程。这…

Polar2025秋季个人挑战赛web-writeup

感觉难度还行polar快递 在登录页面下载备忘录发现用户等级分四个,抓包发现有id=user,改为最高等级的root登录即可获取flag white 常规输入执行命令发现很多符号都被ban了/[;&$"<>?*[]{}()#@!%]/`,发…

题解:P12751 [POI 2017 R2] 集装箱 Shipping containers

cnblogs 题面 第二道根号分治,对初学者来说很友好的一道题。 题意在题面中写的很清楚,这里不多赘述。 思路 先从暴力开始想。 每次暴力的时间复杂度最坏明显是 \(O(n^2)\) 的,因为是类似区间加和最后统计的问题,可…

弱网配置

sudo tc qdisc replace dev eno1 root netem delay 120ms 30ms 25% loss 5% 解除sudo tc qdisc del dev eno1 ingresshttps://blog.csdn.net/2303_78922833/article/details/151372115

网站建设网页设计小江wordpress重写插件

上篇文章《C自动注册的工厂与--whole-archive》提到了--whole-archive选项在自动工厂示例的必要&#xff0c;“貌似也没其他方法了”。 这篇文章介绍另一种可以替代的方式&#xff0c;并分析其优缺点&#xff0c;采用的代码示例同上篇文章。文章最后附代码。 方法介绍 ld链接器…

net网站开发教学视频牌子网排行榜

报告来源&#xff1a;国泰君安&#xff08;訾猛&#xff09;亚马逊以技术为核心驱动力&#xff0c;实现从电商向科技公司的跨越&#xff0c;形成电商、物流、AWS、新零售协同发展的完整生态圈。亚马逊从1995年开始为用户提供线上商品&#xff0c;从一家网上书店发展成全品类电商…

选择网站做友情链接的标准一般是wordpress点击折叠展开内容

Java概况 JavaSE是java分类中的标准版&#xff0c;是刚接触java要学习的基础知识。 JavaEE是java分类中的企业版&#xff0c;是java中的高级&#xff0c;涉及到的知识广泛。 JavaME中M是Micro的缩写&#xff0c;用在嵌入式等电子设备中。 Java软件工程师&#xff1a;通过Ja…

通过【开题答辩过程】以《基于JavaEE的创意产品众筹平台的设计与实现》为例,不会开题答辩的能够进来看看

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

Nano-Banana免费使用指南:一键生成专属3D手办,附超详细提示词 - 指南

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

绘制金融集团监控大屏的地图demo

<!-- 引入ECharts和地图数据 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script> <script src="https://geo.datav.aliyun.com/areas_v3/…

如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)

如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)​bzip2​ 是一个在 Linux 系统中常用的文件压缩工具,这个 RPM 包是专门为 ​CentOS 7 / RHEL 7(64位系统)​​ 准备的安装版本 一、先确认你…

实用指南:《原神助手》开源神器:游戏体验大升级

实用指南:《原神助手》开源神器:游戏体验大升级pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

百度收录网站需要多久做海外推广的公司

一、Git概述&#xff08;1&#xff09;定义Git是目前世界上最先进的分布式版本控制系统。&#xff08;2&#xff09;能干什么&#xff1f;解决冲突、管理权限、代码备份、协同开发、版本还原、历史追查、版本记录、分支管理、代码审查&#xff08;3&#xff09;集中管理型版本管…