12.19 CW 模拟赛 T2. 数

news/2024/12/19 17:43:21/文章来源:https://www.cnblogs.com/YzaCsp/p/18617680

思路

赛时读错题了, 虽然说读对了不一定能做出来, 但是还是比较可惜

首先阐述一下题意, 对 \(S\) 数组进行插入和删除操作, 每次询问让你用 \(T\) 中的质数组合出 \(x\) , 然后将 \(S\) 中的数乘以 \(x\) 之后求最多的完全立方数个数

那么显然的, 我们对于每一个数, 都可以拆成质数之积, 那么显然的, 我们可以知道每个数需要什么质数才能凑成完全立方数

\(op = 1\)

如果这个数可能成为一个完全立方数, 我们记录这个数需要 \(T\) 中质数的个数, 这应该是一个 \(0, 1, 2\) 串串, 丢进去

时间复杂度 \(\mathcal{O} (M)\)

\(op = 2\)

扔出来

时间复杂度 \(\mathcal{O} (M)\)

\(op = 3\)

找最大, 结束

题解使用了 \(0, 1, 2 \ \rm{trie}\) , 但是被 \(\rm{klr}\)\(\rm{pbds}\) 轻松冲过

还是稍微写一些 \(\rm{trie}\) , 补一下我的神秘基础

实现

代码

#include <bits/stdc++.h>
const int MAXM = 520;
const int MAXN = 5e6 + 1;
typedef long long ll;void write(__int128 x) {if (x < 0)putchar('-'), x = -x;if (x > 9)write(x / 10);putchar(x % 10 + '0');return;
}int M;
int prime[MAXM];
int Q;struct node {int App; // 串串的出现次数int son[3]; // 下一个节点int prime;__int128 x;
} Tree[MAXN];
int cnt = 1; // 0 为根节点bool check(ll rest)
{ll l = 1, r = 1000000;while (l <= r){ll mid = (l + r) >> 1;if (mid * mid * mid == rest)return 1;mid * mid * mid < rest ? l = mid + 1 : r = mid - 1;}return 0;
}std::vector<int> mstr;
std::set<int> leave;void ins() {ll num; scanf("%lld", &num);mstr.clear();for (int i = 1; i <= M; i++) {int cnt = 0; while (!(num % prime[i])) cnt++, num /= prime[i];mstr.push_back((3 - (cnt % 3)) % 3);}if (num != 1 && !check(num)) return;ll now = 0;__int128 nowx = 1;for (int i = 0; i < M; i++) {int ch = mstr[i];for (int j = 1; j <= ch; j++) nowx *= prime[i + 1];if (!Tree[now].son[ch]) Tree[now].son[ch] = cnt++;now = Tree[now].son[ch];Tree[now].prime = prime[i + 1];Tree[now].x = nowx;}Tree[now].App++;leave.insert(now);
}void del() {ll num; scanf("%lld", &num);mstr.clear();for (int i = 1; i <= M; i++) {int cnt = 0; while (!(num % prime[i])) cnt++, num /= prime[i];mstr.push_back((3 - (cnt % 3)) % 3);}if (num != 1 && !check(num)) return;ll now = 0;for (int i = 0; i < M; i++) {int ch = mstr[i];now = Tree[now].son[ch];}Tree[now].App--;
}__int128 ansx;
int ans;void solve()
{while (Q--) {int op; scanf("%d", &op);if (op == 1) ins();if (op == 2) del();if (op == 3) {ans = 0, ansx = 0;for (auto i : leave) {int now = i;if (Tree[now].App == 0) {continue;}__int128 x = Tree[now].x;if (ans == Tree[now].App) ansx = std::min(ansx, x);if (ans < Tree[now].App) ans = Tree[now].App, ansx = x;}write(ansx); printf("\n");}}
}signed main()
{scanf("%d", &M);for (int i = 1; i <= M; i++)scanf("%d", &prime[i]);scanf("%d", &Q);solve();return 0;
}

总结

注意读题

字符串插入删除, 字典树是最快的

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

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

相关文章

20222307 2024-2025-1 《网络与系统攻防技术》实验八实验报告

1.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+…

《Django 5 By Example》读后感

一、 为什么选择这本书? 本人的工作方向为Python Web方向,想了解下今年该方向有哪些新书出版,遂上packt出版社网站上看了看,发现这本书出版时间比较新(2024年9月),那就它了。 从2024年11月11日至2024年12月18日期间,花了 22 天阅读完《Django 5 By Example》(《Django项目…

面向对象编程,类和对象

类的关键词 Class 类一般申明在namespace中,枚举和struct一般也在namespace中申明 类的申明语法(类前面可以加访问修饰符) class 类名 {特征——成员变量行为——成员方法保护特征——成员属性构造函数和析构函数索引器运算符重载静态成员 }类申明实例 命名使用帕斯 在同一个…

mysql mysqldump 定时备份

mysqldump方式备份Windows 一、创建bat 任务脚本 ⚠️ 内容背后不能有中文空格,否则会运行失败 新建 bat 脚本复制以下内容,安装自己的需求对内容进行修改@echo off::命令行窗口中显示此条信息 @echo 开始备份数据库::将hour设置为此刻小时位的时间,从0位置开始取2位 set h…

OCS2::ocs2_centroidal_model_质心动量模型

1. ModelHelperFunctions.cpp 1.1 updateCentroidalDynamics() : 质心动力学更新 template <typename SCALAR_T> void updateCentroidalDynamics(PinocchioInterfaceTpl<SCALAR_T>& interface, const CentroidalModelInfoTpl<SCALAR_T>& info,const …

密码学-古典密码

密码学-古典密码 前言 古典密码学(Classic cryptography)和现代密码学(Modern cryptography)的主要差别在于计算机的使用,一般来说,古典密码学是基于字符的,而现代密码学是基于二进制位的。 代换 代换密码是将明文中的字符替代成其他字符,即替代转换,若整个加密过程中…

【笔记】组合数学初步

一些初等的组合数学知识二项式系数 定义: 我们在高中时常见的二项式系数的形式是 \[C_{n}^{k} = \frac{n!}{k!(n-k)!} \]但下文将采用如下的定义: \[\binom{n}{k} = \begin{cases}\dfrac{n^{\underline{k}}}{k!} & k \ge 0\\\\0 & k < 0\end{cases} \]注意这里对 …

翻转字符串翻转单词

一、翻转字符串问题描述 请实现⼀个算法,在不使⽤额外数据结构和储存空间的情况下,翻转⼀个给定的字符串(可以使⽤单个过程变量)。 解题思路 由于不允许使用额外的数据接口和存储空间,所以我们将⼀个字符串以中间字符为轴,前后翻转,也就是将str[len]赋值给str[0],将str[0…

拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?

首发:运维有术 今天分享的主题是:不使用 Helm、Operator,如何在 K8s 集群上手工部署一个开启 SASL 认证的 KRaft 模式的 Kafka 集群? 本文,我将为您提供一份全面的实战指南,逐步引导您完成以下关键任务:配置 Kafka Secret:管理用户密码和集群 ID 配置 Kafka Service:使…

Vulnhub 靶场 Jetty: 1

前期准备 靶机地址:https://www.vulnhub.com/entry/jetty-1,621/ Description Back to the Top The company Aquarium Life S.L. has contacted you to perform a pentest against one of their machines. They suspect that one of their employees has been committing frau…

人车防碰撞识别智慧矿山一体机矿山监控系统中的平台一体机和解码器如何选型?

在构建高效、可靠的视频监控系统时,选择合适的平台一体机和解码器是至关重要的一步。这不仅关系到监控系统的稳定性和可靠性,还直接影响到监控画面的清晰度和系统的扩展性。以下是在选择过程中需要考虑的关键因素,以确保您的监控系统能够满足特定场景的需求,并在未来几年内…