AT AGC003 题解

news/2025/11/17 21:55:57/文章来源:https://www.cnblogs.com/Tsuukaku/p/19234570

A

简单题,由于每一步的距离都可以随意确定,同时只要求最后回到原点,所以只要各个方向上都有相应相反的方向存在即为合法,反之存在一个不匹配的方向则不合法。我的写法绝对傻了。

#include <bits/stdc++.h>using i64 = long long;void solve() {std::string s;std::cin >> s;int tn = 0, ts = 0, te = 0, tw = 0;for (auto i : s) {if (i == 'N')tn++;if (i == 'S')ts++;if (i == 'E')te++;if (i == 'W')tw++;}if (tn) {if (ts) {}else {std::cout << "No\n";return;}}if (ts) {if (tn) {}else {std::cout << "No\n";return;}}if (tw) {if (te) {}else {std::cout << "No\n";return;}}if (te) {if (tw) {}else {std::cout << "No\n";return;}}std::cout << "Yes\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);solve();return 0;
}

B

简单贪心题,容易发现,每个选项要么和自己匹配,要么和相邻匹配,我们钦定每个位置和自己或者后一个位置匹配,显然和自己合并与和下一个数合并的次序和安排不影响答案,我们优先匹配自身,则 \(\bmod 2\) 之后只有 \(0/1\),如果 \(a_i = a_{i + 1} = 1\) 则都减去 \(1\) 之后累进答案。

#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; i++) {std::cin >> a[i];}i64 ans;for (int i = 1; i <= n; i++) {ans += a[i] / 2;a[i] = a[i] % 2;if (i != n && a[i] && a[i + 1]) {a[i]--;a[i + 1]--;ans++;}}std::cout << ans << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);solve();return 0;
}

C

注意审题。交换的是“相邻”的,同时“反转”顺序。容易发现操作一本质交换 \(a_i, a_{i + 1}\),操作二本质交换 \(a_i, a_{i + 2}\),下标奇偶发生了变化。最小化操作一就尽可能,直到不得不用操作二。那么我们排序,找到新的位置和原来位置,如果下标奇偶性不一样那么就要用一次操作一调整坐标,答案最后记得除以 \(2\)

#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n + 1), b(n + 1);for (int i = 1; i <= n; i++) {std::cin >> a[i];b[i] = a[i];}std::sort(b.begin() + 1, b.end());for (int i = 1; i <= n; i++) {a[i] = std::distance(b.begin(), std::lower_bound(b.begin() + 1, b.end(), a[i]));}i64 ans = 0;for (int i = 1; i <= n; i++) {if ((a[i] & 1) != (i & 1))ans++;}std::cout << (ans / 2) << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);solve();return 0;
}

D

数论大分讨,但是很妙啊。

不难发现,对于一个立方数而言,每一种质因子的个数一定是 \(3\) 的倍数;同时普遍地,对于一个数 \(x\),最多只有一个 \(\gt \sqrt{x}\) 的质因子。设 \(s_i\) 上界为 \(L\),一个朴素的想法是去拆每一个 \(s_i\),检查是否有一个大于 \(\sqrt{L}\) 的质因子,如果有则无法和其他数相乘得到 cubic number,复杂度来到 \(O(n \sqrt{L})\),考虑怎么扩展这个做法:对于一个数 \(x\),最多只有两个大于 \(\sqrt[3]{x}\) 的质因子。

首先,我们将 \([1, \sqrt[3]{L}]\)\(s_i\) 每个立方根因子排除掉,保证质因子个数控制在两个以内,找到每一个 \(s_i\) 每一个立方根因子剩下的具体个数。

对于数 \(x\) 进行分类讨论,将其每个质因子个数对 \(3\) 取模,产生冲突的数会是两两对应的(对 \(3\) 取差)。

  • 有一个 \(\gt \sqrt{n}\) 的质因子,则不会和其他数产生冲突,直接累计进答案算贡献
  • 有一个/两个大小在 \([\sqrt[3]{n}, \sqrt{n}]\) 之间的质因子,此时当且仅当两个质因子大小相同、个数分别为 \(1, 2\) 时才有可能会产生冲突。假设 \(x\) 含有的两个在此范围内的质因子大小不同,则无法和其他数产生冲突,直接计入贡献;如果只有一个或者两个大小相同的质因子,才有可能产生冲突,我们对在此范围内的质因子开 std::pairstd::map 用于查询
  • 不存在 \(\sqrt[3]{n}\) 以上质因子的 \(s_i\),只会冲突,我们还是开 std::map,对于当前的 \(s_i\),取模之后找到冲突的 \(x'\),将 \(s_i\) 所在项 \(+ 1\)\(x'\) 所在项取 \(\max\) 即为键值对答案的贡献

复杂度降到了 \(n\sqrt[3]{n}\) 级别,加上一个 \(n \log n\) 的预处理。

#include <bits/stdc++.h>#define int long longconstexpr int N = 1e5 + 7;
constexpr int SL1 = 1e5;
constexpr int SL2 = 2154;int n, mxs, ans;
int pct1, pct2;
int s[N], pri[N], g[N];
bool isp[N];std::map<int, int> t0;
std::map<std::pair<int, int>, int> t1, t2;void init() {for (int i = 2; i <= SL1; i++) {if (!isp[i])pri[++pct1] = i;if (i == SL2)pct2 = pct1;for (int j = 1; j <= pct1 && i * pri[j] <= SL1; j++) {isp[i * pri[j]] = 1;if (i % pri[j] == 0)break;}}
}void solve(int x) {memset(g, 0, sizeof(g));int sum1 = 1, sum2 = 1;for (int i = 1; i <= pct2; i++) {while (x % pri[i] == 0) {x /= pri[i];g[i]++;}g[i] %= 3;if (g[i] == 1) {sum1 *= pri[i];sum2 *= pri[i] * pri[i];} else if (g[i] == 2) {sum1 *= pri[i] * pri[i];sum2 *= pri[i];}}int p = std::sqrt(x);if (SL2 < x && x <= SL1 && !isp[x]) {int c1 = ++t1[{x, sum1}], c2 = t2[{x, sum2}];if (c1 > c2)ans++;} else if (x > SL1 && p * p == x && !isp[p]) {int c1 = ++t2[{p, sum1}], c2 = t1[{p, sum2}];if (c1 > c2)ans++;} else if (x == 1) {if (sum1 == 1 && sum2 == 1) {if (!t0[sum2])ans++;t0[sum2] = 1;return;}int c1 = ++t0[sum1], c2 = t0[sum2];if (c1 > c2)ans++;} else {ans++;}
}signed main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);init();std::cin >> n;for (int i = 1; i <= n; i++) {std::cin >> s[i];}for (int i = 1; i <= n; i++) {solve(s[i]);}std::cout << ans << "\n";return 0;
}

E

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

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

相关文章

Oracle故障处理:aix 5.3 ml6安装10.2.0.1 rac报错

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle案例处…

Hive SQL循环与MapReduce的关系

Hive SQL循环与MapReduce的关系主要体现在Hive如何将SQL查询转换为MapReduce任务来执行。Hive是一个基于Hadoop的数据仓库工具,它允许用户使用类SQL的查询语言来处理和分析存储在Hadoop分布式文件系统(HDFS)中的数据…

《算 设》学

首先,我通过分块把标题的代价切分成若干份间的交互。其次,我通过势能函数把中间一段的代价摊还了。最后,我加了随机采样并期望它以高概率包含关键集合。\[\newcommand{\cur}[1]{\left\{#1\right\}} \newcommand{\t}…

[GESP202506 二级] 幂和数

[GESP202506 二级] 幂和数B4357 [GESP202506 二级] 幂和数 题目描述 对于正整数 $n$,如果 $n$ 可以表为两个 $2$ 的次幂之和,即 $n = 2^x + 2^y$($x, y$ 均为非负整数),那么称 $n$ 为幂和数。 给定正整数 $l, r$,…

*题解:P3586 [POI 2015 R2] 物流 Logistics

原题链接 解析 考虑能每次选 \(c\) 个正数进行 \(s\) 次 \(-1\) 操作的充要条件是什么。首先由于只进行 \(s\) 次操作,可以将 \(> s\) 的数视为 \(s\)。然后求和,如果和 \(< c \cdot s\),那么必定无法操作,反…

欢迎关注我的公众号和B站

最近一年很少写博客。随着AI火热,AI+搜索、AI+知识库日渐成熟,很多问题都能通过AI+搜索快速找到解决方法,个人博客已经式微。以后我这个博客估计很少更新,但不是完全放弃,可能偶尔会更新一些内容,如果我想更新的…

week3 作业

week3 作业(一)最优子结构与递归方程 设 dp [i][j] 表示从顶部走到第 i 行第 j 列的最大路径和。最优子结构表现为:dp [i][j] = max (dp [i-1][j-1], dp [i-1][j]) + 三角形第 i 行第 j 列数值(j>0 且 j<i)…

hive mybatis是否支持动态SQL

Hive MyBatis 支持动态 SQL。MyBatis 提供了动态 SQL 功能,可以根据不同的条件生成不同的 SQL 语句。在 Hive MyBatis 中,可以使用 <if> 标签来实现动态 SQL 的编写。例如,当需要根据某个字段的值来动态生成查…

一类将度数变为 1/2 的优化建图 笔记

有以下特点:儿子数和复杂度强相关,不同子树的本质相同,按照一定的顺序做 / 判定,答案不变。 1. P6326 Shopping 不知道为啥很快就会了只有一个儿子的情况(实则对树形背包不熟练导致的),就是强制选一个自己的物品…

2025.11.17模拟赛

赛时,调动的挺好吧 赛时看4题推了推,都没有推出来 然后回去稳定了一下心态 看T1,终于会了,然后大概在2h30min切掉了 然后去推T3,大概在还有1个多小时会了正解做法,但是决策单调性优化这一块之前没写过,不知道该…

11/17

今天Java弄了下前端,后端,数据库连接,但注册界面一直没弄好,只能登,不能注册

英语_阅读_Electric cars_待读

In the early 20th century, the worlds transportation system relied heavily on steam-powered trains and horse-drawn carriages. 在20世纪早期,世界的交通系统严重依赖蒸汽火车和马车。 These modes of transpo…

linux 下中文字体安装.ttf 格式

把下载的字体 复制到 linux系统的目录下 命令: sudo cp your-font.ttf /usr/local/share/fonts/ 宋体URL: https://files.cnblogs.com/files/blogs/773702/simsun.7z?t=1763385354&download=true 免费的 WenQua…

2025 年锚具厂家 TOP 企业品牌推荐排行榜,预应力锚具 / 五孔锚具 / 低回缩锚具 / 张拉锚具 / 固定端锚具 / 桥梁预应力锚具 / 边坡锚具公司推荐!

引言在建筑行业尤其是桥梁建设、市政工程等领域,锚具作为关键部件,其质量优劣直接关乎工程的安全性与耐久性。当下锚具市场品牌众多,产品质量参差不齐,这给采购方和工程建设者们带来了诸多困扰。部分小品牌锚具,因…

2025 年锚具厂家 TOP 企业品牌推荐排行榜,桥梁伸缩缝 / 道路伸缩缝 / 梳齿板伸缩缝推荐这十家公司!

引言在建筑与桥梁工程领域,伸缩缝扮演着至关重要的角色。它能有效应对因温度变化、地基沉降等因素导致的结构伸缩变形,确保建筑和桥梁的稳定性与安全性。然而,当前伸缩缝行业面临诸多问题。一方面,市场上品牌众多、…

2025 年锚具厂家 TOP 企业品牌推荐排行榜,橡胶支座 / 桥梁支座 / 国标支座 / 滑板支座 / 固定支座 / 弹性支座 / 活动铰支座 / 盆式支座 / 减震支座 / 缓冲支座公司推荐!

引言在当今的建筑与工程领域,支座作为关键部件,其质量与性能直接关系到工程的稳定性与安全性。然而,随着市场的不断发展,支座品牌与厂家如雨后春笋般涌现,这使得采购方与工程团队在选择时面临诸多困扰。一方面,不…

软件工程学习日志2025.11.17

今天的学习重点是设计模式中的享元模式,结合“围棋软件”的实验需求,完成了从需求分析、代码实现到类图绘制的全流程。过程中在Mermaid类图生成上踩了不少坑,最终摸索出兼容且逻辑正确的方案,特此记录整个过程,方…

CSP2025 游记 + whk 期中

非常的 fvvJ 用了大概 50 min 把所有题都写了,开始对拍后两题,拍了几万组没啥问题。没检查 T1、T2,开始瞎玩终端(学习了 while、let、declare 的用法)。估分 400。 S T1 卡了我 1 h,后面发现想复杂了。T2 先用 1…

论文速读 | 2025年11月

Object-Centric Latent Action LearningAAAI 2026 dunnolab

2025-11-17

CF Problem - 839C - Codeforces(DFS)(1500)(期望) 求期望dp 即求1的(所有孩子的期望+1)的和,除以孩子数量 #include <bits/stdc++.h> using namespace std; #define LL long long const LL mod = 9982…