VP Educational Codeforces Round 14

news/2025/2/23 15:22:31/文章来源:https://www.cnblogs.com/maburb/p/18732197

A. Fashion in Berland

题意:有\(n\)个数,需要满足正好有\(n-1\)\(0\)或者\(n=1\)时正好一个\(1\)

记录\(1\)的个数,判断即可。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}int cnt = std::count(a.begin(), a.end(), 1);if ((n == 1 && cnt == 1) || (n > 1 && cnt == n - 1)) {std::cout << "YES\n";} else {std::cout << "NO\n";}
}

B. s-palindrome

题意:判断一个字符串是不是镜像的,所谓镜像就是对应字母是对称的。

需要一点点耐心找对称的字母。

点击查看代码
void solve() {std::string s;std::cin >> s;std::map<char, char> mp;std::vector<std::string> ss{"AA", "bd", "HH", "II", "MM", "OO", "oo", "YY", "XX", "xx", "pq", "TT", "UU", "vv", "VV", "WW", "ww"};for (auto & t : ss) {mp[t[0]] = t[1];mp[t[1]] = t[0];}int n = s.size();for (int l = 0, r = n - 1; l <= r; ++ l, -- r) {if (mp[s[l]] != s[r]) {std::cout << "NIE\n";return;}}std::cout << "TAK\n";
}

C. Exponential notation

题意:给你一个大数,把它转换为科学计数法表示。

模拟题,需要一点细节。

点击查看代码
void solve() {std::string s;std::cin >> s;int n = s.size();int l = -1, r = -1;for (int i = 0; i < n; ++ i) {if (s[i] != '0' && s[i] != '.') {l = i;break;}}for (int i = n - 1; i >= 0; -- i) {if (s[i] != '0' && s[i] != '.') {r = i;break;}}int p = s.find('.');if (p == s.npos) {p = n;}if (l == -1) {std::cout << 0 << "\n";return;} std::string ans;ans += s[l];if (l < r) {ans += '.';}for (int i = l + 1; i <= r; ++ i) {if (s[i] != '.') {ans += s[i];}}	if (l + 1 != p) {ans += "E";if (l < p) {ans += std::to_string(p - l - 1);} else {ans += std::to_string(p - l);}}std::cout << ans << "\n";
}

D. Swaps in Permutation

题意:给你一个数组,以及\(m\)个可以交换的位置,求数组操作后的最大字典序。

根据冒泡排序,对于每个可以交换的联通块,我们都可以让它降序排序。那么用并查集维护联通块,每个联通块单独排序。

点击查看代码
struct DSU {std::vector<int> fa, cnt;DSU(int _n) {init(_n);}void init(int _n) {fa.assign(_n, 0);cnt.assign(_n, 1);std::iota(fa.begin(), fa.end(), 0);}int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}bool merge(int x, int y) {x = find(x), y = find(y);if (x == y) {return false;}fa[y] = x;cnt[x] += cnt[y];return true;}bool same(int x, int y) {return find(x) == find(y);}int size(int x) {return cnt[find(x)];}
};void solve() {int n, m;std::cin >> n >> m;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}DSU dsu(n);for (int i = 0; i < m; ++ i) {int u, v;std::cin >> u >> v;-- u, -- v;dsu.merge(u, v);}std::vector<std::vector<int>> g(n);for (int i = 0; i < n; ++ i) {g[dsu.find(i)].push_back(i);}for (int i = 0; i < n; ++ i) {std::vector<int> b;for (auto & x : g[i]) {b.push_back(a[x]);}std::sort(b.begin(), b.end(), std::greater<int>());for (int j = 0; j < b.size(); ++ j) {a[g[i][j]] = b[j];}}for (int i = 0; i < n; ++ i) {std::cout << a[i] << " \n"[i == n - 1];}
}

E. Xor-sequences

题意:给你\(n\)个数,如果两个数异或后二进制下1的个数是3的倍数,这两个就可以在序列中相邻。求有多少种长度为\(k\)的序列。

如果我们建立一个邻接矩阵,那么\(g[i][j]\)表示\(j\)能否在\(i\)后面,那么问题转换为求一个图中节点个数为\(k\)的路径有多少,变成了矩阵乘法板子。

点击查看代码
const int N = 100;
using M = std::array<std::array<Z, N>, N>;int n;
i64 k;struct Mat {M mat;Mat() {init();}void init() {for (int i = 0; i < n; ++ i) {for (int j = 0; j < n; ++ j) {mat[i][j] = 0;}}}std::array<Z, N> & operator [](const int i) {return mat[i];}
};Mat operator * (Mat & a, Mat & b) {static Mat c;for (int i = 0; i < n; ++ i) {for (int j = 0; j < n; ++ j) {c[i][j] = 0;for (int k = 0; k < n; ++ k) {c[i][j] += a[i][k] * b[k][j];}}}return c;
}void solve() {std::cin >> n >> k;std::vector<i64> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}auto count = [&](i64 x) -> int {int res = 0;while (x) {if (x & 1) {++ res;}x >>= 1;}return res;};Mat g;for (int i = 0; i < n; ++ i) {for (int j = 0; j < n; ++ j) {if (count(a[i] ^ a[j]) % 3 == 0) {g[i][j] = 1;}}}Mat res;for (int i = 0; i < n; ++ i) {res[i][i] = 1;}-- k;while (k) {if (k & 1) {res = res * g;}g = g * g;k >>= 1;}Z ans = 0;for (int i = 0; i < n; ++ i) {for (int j = 0; j < n; ++ j) {ans += res[i][j];}}std::cout << ans << "\n";
}

F. Couple Cover

题意:对于每个\(p\),求\(a\)中有多少\(i, j\)满足\(a[i] \times a[j] >= p\)

发现值域只有\(3e6\),考虑预处理,可以记录每个数出现的个数,然后枚举每个数的倍数,那么我们记f[k] = \(a[i] \times a[j] == k\)的个数,那么\(a[i] \times a[j] < k\)的个数就是\(\sum_{i=1}^{k-1} f[k]\)。 总个数有\(\frac{n(n-1)}{2}\)个,那么对于每个\(p\),答案就是\(\frac{n(n-1)}{2} - \sum_{i=1}^{p-1} f[p]\)

点击查看代码
void solve() {int n;std::cin >> n;const int N = 3e6 + 5;std::vector<int> cnt(N);for (int i = 0; i < n; ++ i) {int x;std::cin >> x;++ cnt[x];}std::vector<i64> f(N);for (int i = 1; i < N; ++ i) {for (int j = i; j < N; j += i) {f[j] += (i64)cnt[i] * (cnt[j / i] - (i == j / i));}}for (int i = 1; i < N; ++ i) {f[i] += f[i - 1];}int m;std::cin >> m;while (m -- ) {int x;std::cin >> x;std::cout << (i64)n * (n - 1) - f[x - 1] << "\n";}
}

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

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

相关文章

QT布局管理器(QVBoxLayout,QHBoxLayout)不同部分比例大小设置方法

QT布局管理器(QVBoxLayout,QHBoxLayout)不同部分比例大小设置方法默认情况如果将多个控件加入到QT的布局管理器中(QVBoxLayout、QHBoxLayout)所有控件占用的宽度/高度是等比例大小的。然后,在实际应用和开发中往往希望在同一个布局管理器中,根据控件实际显示内容的多少或…

哪吒探针V1:全新版安装

哪吒探针可以方便的帮助我们监控服务器性能。 本文为大家带来最新版v1的安装过程。 一、安装控制面板 运行一键安装脚本 curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh这里我们…

分散的离开公司的跨国纠纷的广泛斯大林年的;;;反斯大林可能的司法法国vdnmfjioaspgrjosgmdlfbdfvb

法斯基返回南京了哦;角色的绿柠檬酸公司经理年女郎科技的风格vs的风俗哦管理呢诺夫斯基考虑过赛时T1正解没调出来。打暴力,第二个暴力二分挂了但第一档暴力都是第二档的数据,but我先判的第二档,so人麻了。 不管了反正都要退役了,就先**这样吧。__________________________…

FrameScan:cms漏洞检测框架

免责声明: 工具仅供安全研究与学习之用,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律及连带责任。信息及工具收集于互联网,真实性及安全性自测!!!项目介绍 FrameScan是一款python3编写的简易的cms漏洞检测利用框架,支持漏洞检测与简…

fork打开VS Code

在 File → Preferences → Custom Commands 中,添加 Respository 命令。 #!/bin/bash# 已知的路径格式(Unix/Linux风格,其中/d表示D盘) unix_path=$PWD# 提取盘符(注意:这里假设盘符总是小写,并且紧跟在根斜杠后面) disk_letter="${unix_path:1:1}" disk_le…

Windows平台调试器原理与编写02.一般断点与反汇编引擎

https://www.bpsend.net/thread-256-1-2.html 一般断点(软件断点) 断点的尊严断的下来 走的过去 下次还来所有合格的断点都应该满足这3个要求 OD下断点实际是把指令的第一个字节改成了CC,当程序执行到CC的时候其实是抛了一个异常(EXCEPTION_BREAKPOINT),这个异常就会进入调试器…

输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路

详细前端代码写于上一篇:输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE项目-全局模糊检索 【效果图】:分组展示选项 =>【提供界面操作体验】 【mybatis】:多数据表抓取数据<select id="fin…

使用@SpringBootApplication注解

https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/using-boot-using-springbootapplication-annotation.html许多Spring Boot开发人员希望他们的应用程序能够使用自动配置(auto-configuration)、组件扫描(component scan),并能够在其“应用程序类(applicat…

跨时钟域-单脉冲信号处理方法

逻辑设计中将所有同步元件(例如触发器和RAM等)使用相同时钟信号的部分称为时钟域。 退出亚稳态所需的时间被称为resolution Time(Tr)。 由于建立时间的违反,寄存器的输出电压可能是代表逻辑高、逻辑低,甚至更糟糕的是介于逻辑高和逻辑低之间的电压。 亚稳态是指触发器无法…

VMWare workstation pro 17 Windows11 中提示不能 支持Intel VT-x 虚拟化的问题终极解决方案

1. 在BIOS中开启虚拟化 2. 在系统功能里面取消hyper-v,虚拟机管理平台,沙盒功能, 虚拟机监控平台四个功能。 3. 在内核隔离里面取消内存隔离。 4. 运行下面的批处理。 5.重启后会有两次提示是否关闭vbs,两次按F3关闭,重启后一切正常。===================================…

PipeCAD Spooler 管道加工设计工具

PipeCAD Spooler是一款专门为管道预制厂商设计的管道深化加工设计和管理的工具。有以下一些功能:+ 直接导入PCF/IDF管道数据进行深化设计,大大提高设计效率; + 精确的材料统计,为材料采购提供准确数据; + 通过深化设计将管线拆分为易于车间加工的管段,提高加工质量,缩短…

『Python底层原理』--Python属性的工作原理

Python中的属性操作(如获取、设置和删除属性)是我们日常编程中非常常见的操作。 但你有没有想过,当我们写下obj.attr或obj.attr = value时,Python 内部究竟发生了什么? 本文将探讨Python属性的工作原理,并通过简单的代码示例来更好地理解这些概念。 1. 属性的基本操作 在…