[赛记] 多校A层冲刺NOIP2024模拟赛23

news/2024/11/18 15:21:23/文章来源:https://www.cnblogs.com/PeppaEvenPig/p/18552731

字符串构造机 100pts

原题,见[赛记] 多校A层冲刺NOIP2024模拟赛01【衡中】 T1;

忍者小队 60pts

赛时最后想出来个 $ \Theta(n^2 \log n) $ 的 DP,所以60pts;

对于这个DP,直接用 map 维护一下所有lcm的状态转移即可;

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int n, m;
int a[500005];
int vis[500005];
int ma;
vector<int> v[500005];
int gc[500005];
map<int, int> f;
int pri[500005], cnt;
bool vi[500005], vv[500005];
void w() {for (int i = 2; i <= ma; i++) {if (!vi[i]) {pri[++cnt] = i;for (int j = 2; j * i <= ma; j++) {vi[i * j] = true;}}}
}
int main() {freopen("sor.in", "r", stdin);freopen("sor.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a[i];vis[a[i]]++;ma = max(ma, a[i]);}w();for (int i = 1; i <= m; i++) {for (int j = 1; j * i <= ma; j++) {if (vis[j * i]) {for (int k = 1; k <= vis[j * i]; k++) v[i].push_back(j * i);if (gc[i] == 0) gc[i] = j * i;else gc[i] = __gcd(gc[i], j * i);int pos = lower_bound(pri + 1, pri + 1 + cnt, j) - pri;if (pri[pos] == j) vv[i] = true;}}}for (int i = 1; i <= m; i++) {if (gc[i] != i) {cout << -1 << ' ' << -1 << '\n';continue;}if (vis[i]) {cout << 1 << ' ' << v[i].size() << '\n';continue;}if (vv[i]) {cout << 2 << ' ' << v[i].size() << '\n';continue;}f.clear();for (int j = 0; j < v[i].size(); j++) {int now = v[i][j];if (!f[now]) f[now] = 1;else f[now] = min(f[now], 1);for (auto it = f.begin(); it != f.end(); it++) {int u = __gcd(it -> first, now);if (u < i) continue;if (!f[u]) f[u] = it -> second + 1;else f[u] = min(f[u], it -> second + 1);}}cout << f[i] << ' ' << v[i].size() << '\n';}return 0;
}

对于正解,考虑到答案不会很大(小于等于 $ 7 $,考虑 $ 2 \times 3 \times 5 \times 7 \times 11 \times 13 \times 17 \times 19 = 9699690 > 600000 $ ),所以可以先枚举答案,然后判断是否合法;

以下设 $ w $ 为值域;

判断是否合法的问题可以转化为方案数,设 $ f_i $ 表示当前 $ lcm = i $ 的方案数,则有转移 $ f_i = C_{sum_i}^{t} - \sum_{j = 2}^{\lfloor \frac{w}{i} \rfloor} f_j $;

最后判断 $ f $ 是否为 $ 0 $ 即可,这里可以对一个比较大的质数取模(毕竟是这个质数的倍数的概率较低);

时间复杂度:$ \Theta(w \ln w) $;

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const long long mod = 998244353;
int n, m;
int a[5000005], ma, vis[5000005];
int ans[5000005];
vector<int> v[5000005];
long long f[5000005], fac[5000005], fav[5000005];
long long ksm(long long a, long long b) {long long ans = 1;while(b) {if (b & 1) ans = ans * a % mod;a = a * a % mod;b >>= 1;}return ans;
}
long long C(long long a, long long b) {if (a < b) return 0;if (b < 0) return 0;return fac[a] * fav[b] % mod * fav[a - b] % mod;
}
int main() {freopen("sor.in", "r", stdin);freopen("sor.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a[i];vis[a[i]]++;ma = max(ma, a[i]);}fac[0] = 1;fav[0] = 1;for (int i = 1; i <= 1000000; i++) {fac[i] = fac[i - 1] * i % mod;fav[i] = ksm(fac[i], mod - 2);}for (int i = 1; i <= ma; i++) {for (int j = 1; j * i <= ma; j++) {if (vis[j * i]) {for (int k = 1; k <= vis[j * i]; k++) v[i].push_back(j * i);}}}for (int t = 1; t <= 7; t++) {for (int i = 1; i <= ma; i++) f[i] = 0;for (int i = ma; i >= 1; i--) {if (v[i].size() < t) continue;long long sum = 0;for (int j = 2; j * i <= ma; j++) {sum = (sum + f[i * j]) % mod;}f[i] = (C(v[i].size(), t) - sum + mod) % mod;}for (int i = 1; i <= m; i++) {if (f[i] != 0 && !ans[i]) {ans[i] = t;}}}for (int i = 1; i <= m; i++) {if (!ans[i]) cout << -1 << ' ' << -1 << '\n';else cout << ans[i] << ' ' << v[i].size() << '\n';}return 0;
}

狗卡 0pts

赛时被 $ 600005 $ 个 deque 欺骗以致于都 RE,以此警告;

deque 的空间要乘 $ 16 $ 还是多少,所以谨慎;

对于这个题,我们首先想一想每个武将只有一级的时候,那么每次选最小即可;

如果不是一级,考虑两个数段 $ a, b $ ,$ a $ 先于 $ b $ 当 $ \overline{a} < \overline{b} $ 时;

所以我们找每个武将的最长递增平均值段即可,考虑插入一个数,我们让它一直和前面的段合并直到递增即可;

用个堆维护一下,每次出最小的,时间复杂度:$ \Theta(n \log n) $;

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
long long n, m;
vector<int> v[600005];
struct sss{double val;int id, l, r;long long sum;bool operator <(const sss &A) const {return val > A.val;}
}e[1200005];
priority_queue<sss> q;
int main() {freopen("dog.in", "r", stdin);freopen("dog.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;int k, x;for (int i = 1; i <= n; i++) {cin >> k;v[i].push_back(0);for (int j = 1; j <= k; j++) {cin >> x;v[i].push_back(x);}int now = 0;for (int j = 1; j <= k; j++) {e[++now] = {1.00 * v[i][j], i, j, j, v[i][j]};while(now > 1 && e[now].val <= e[now - 1].val) {e[now - 1].r = e[now].r;e[now - 1].sum += e[now].sum;e[now - 1].val = 1.00 * e[now - 1].sum / (e[now - 1].r - e[now - 1].l + 1);now--;}}for (int j = 1; j <= now; j++) q.push(e[j]);}long long sum = 0, now = 0, ans = 0;while(!q.empty()) {sss t = q.top();q.pop();for (int i = t.l; i <= t.r; i++) {ans += sum * v[t.id][i];now += v[t.id][i];sum++;}}ans += (m - now) * sum;cout << ans;return 0;
}

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

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

相关文章

巡检人员超长时间停留识别智慧矿山一体机人车防碰撞识别:打造智慧矿山的创新方案

智慧矿山一体机是专为矿山环境量身定制的智能化解决方案,旨在通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术,实现对矿山生产、管理、安全、环保等各个环节的智能化改造和升级。这一方案不仅提高了矿山的生产效率,降低了运营成本,还显著增强了安全监管能力…

Exchange 2016部署实施案例篇-06.升级到最新CU补丁

更新到最新CU补丁这篇其实我是想更新完公网发布在写的,但由于最近条件有限,原来用于测试的公网IP地址由于运营商原因一直没办法更新,所以只好先更新这篇了。 扩展架构首先我们还需要进行域架构扩展(或者让安装程序自己扩展也行),如图所示:扩展 Active Directory 架构: …

【FMC169】基于VITA57.1标准的4发4收射频子模块(基于ADRV9026)

​ 产品概述 FMC169 是一款基于VITA57.1 标准规范,实现4 收4发的射频子模块,该板卡基于ADI的捷变收发器ADRV9026作为处理核心,射频工作范围为75MHz~6GHz频段,发射最大信号带宽450MHz,接收最大带宽200MHz,提供4路发射、4路接收。 该板卡支持外部参考时钟、支持外部本振输入…

Alpha冲刺(5/14)——2024.11.16

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

Alpha冲刺(6/14)——2024.11.17

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

【小记】如何将多媒体键映射为锁屏

工作电脑为一体机。所有的USB接口都在屏幕的后面。插拔U盘极不方便。于是搜索USB小物件,看能不能通过小物件将USB的接口延长到屏幕前 寻觅一番,找到一个中意的小物件——ELEKS MAKER 极客桌面控制器 如上图所示,小物件有着朋克风,充满现代感。带有3个USB2.0接口,日常工作…

C#获取数字字符串数值连续字符串

C#获取数字字符串数值连续字符串 本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/18552687

数据爬取后,如何进行有效的数据清洗和分析?

在大数据时代,数据的价值不言而喻。数据爬取是获取数据的第一步,但爬取后的数据往往包含噪声、缺失值 和不一致性,这就需要进行数据清洗。清洗后的数据可以用于进一步的分析,以提取有价值的信息和知识。本 文将介绍数据爬取后的数据清洗和分析流程,并提供代码示例。数据清…

调试WPF数据绑定的几种方法

最近在帮一些小伙伴解决问题时,会遇到各种奇奇怪怪的问题。 比较典型的包括 命名空间错误,如System.Drawing.Brushes类型和System.Windows.Media.Brushes类型错误使用,导致在Converter中,颜色转换不生效。 数据绑定错误,这个导致的原因比较多,所以这里我们总结一下如何调…

全网最全商品模型设计方案,不接受反驳!

大家好,我是汤师爷~ 今天聊聊商品概念模型设计。 优秀的商品概念模型应具备充分的灵活性和抽象性,以适应不同行业的需求变化,并在系统升级或业务调整时,能最小化重构的工作量。 商品模型是商品管理系统的核心,整体来看,可以划分为三个关键部分:基础资料:用于定义和管理…

触想发布超薄紧凑型Z系列B款工控机,强固小巧,更薄更灵活!

工业电脑知名品牌触想智能,于近日发布旗下全系工控机中最纤薄一代——Z系列B款工控机TPC08-AIOT,破解小机身VS拓展性的结构悖论,34mm厚度的标准版机身上集成4个USB和COM、LAN、HDMI、12pin端子等完整接口功能,可适应狭窄空间和多I/O连接需求。搭载的RockchipRK3568处理器进…

OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD

前言深入理解相机视口,摸索相机视口旋转功能,背景透明或者不透明。  本篇,实现了一个左下角旋转HUD且背景透明的相机视口。 Demo HUD相机的坐标抬头HUD就是通过投影矩阵来实现,具体可参看《OSG开发笔记(二十):OSG使用HUD显示文字》Hud要单独创建一个新相机 注意关闭光…