2025-11-19 ZYZ28-NOIP-XiaoMao Round 33550336 hetao1733837的record

news/2025/11/19 17:13:47/文章来源:https://www.cnblogs.com/hetao1733837/p/19243328

2025-11-19 ZYZ28-NOIP-XiaoMao Round 33550336 hetao1733837的record

2025-11-19 ZYZ28-NOIP-XiaoMao Round 33550336 hetao1733837的record

比赛链接:

A.C.Competitive Fishing

原题链接1:CF2042C Competitive Fishing

原题链接2:2042C Codeforces

提交链接:航海马(sail)

分析

这是个黄?***********************************

原始思路:$01$可能是一组,或者$0$应该不太能自己成为一组,特别是最后一组……在一组中尽可能$1$的个数大于$0$的个数。

正确思路:艹,并非从序列本身出发考虑。好的,后半部分猜想需要改动,然后得出重要结论:每个断点后对答案的贡献是$1$的个数减去$0$的个数。

那么,只需从后往前枚举断点并算出$n-1$个断点对答案的贡献,从大到小贪心地取即可。

呃……CF题好在比较思维,也坏在思维比较意识流。

正解

#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int t;
int n, k;
string s;
int w[N];
int main(){freopen("sail.in", "r", stdin);freopen("sail.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t--){cin >> n >> k;cin >> s;int cnt0 = 0, cnt1 = 0;for (int i = n - 1; i >= 0; i--){if (s[i] == '0')cnt0++;if (s[i] == '1')cnt1++;w[i] = cnt1 - cnt0;		}sort(w + 1, w + n);long long sum = 0, m = 1;bool flag = 1;for (int i = n - 1; i > 0; i--){if (w[i] <= 0){flag = 0;break;}sum += w[i];m++;if (sum >= k)break;} if (!flag || sum < k)cout << -1 << '\n';elsecout << m << '\n';}
}

B.tree

原题链接:树上旅行(tree)

分析

呃,等比数列+快速幂+找规律——我没切就是橙题!我依旧认为这题比$A$简单。

好,我们学习一下狼人嚎的$blog$。

考虑向下跳

当前点为$pos$,其第$x$个儿子下标为$pos\times n+1+x - n$,向该方向走$y$步会走到$pos\times ny+\sum\limits_{i=0}(1+x)\times n^i=pos\times n^y+(1+x-n)\times \sum\limits_{i=0}{y}ny$。

可以预处理$\sum\limits_{i = 0}^{y}n\times i$,也可以写等比数列……

考虑向上跳

把向下跳压入栈中,每次弹栈。若$y$大于等于上次操作步数($top_y$)

则$pos=pos-(1+top_x-n)\times \sum\limits_{i = 0}{top_y}n$

然后$pos=\frac{pos}{n^{top_y}}$

当然要求$n^{top_y}$的逆元。

最后$y=y-top_y$。

弹栈即可,直到找不到 $y<top_y$

正解

#include <bits/stdc++.h>
#define mod 998244353
using namespace std;
const int N = 100005;
int n, q;
stack<pair<int, int>> stk;
long long base[N], s[N], pos = 1;
long long mpow(long long x, long long y){if (y == 0)return 1;if (y & 1)return mpow(x * x % mod, y / 2) * x % mod;return mpow(x * x % mod, y / 2);
}
int main(){freopen("tree.in", "r", stdin);freopen("tree.out", "w", stdout); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> q;base[0] = 1;for (int i = 1; i < N; i++)base[i] = base[i - 1] * n % mod;s[1] = 1;for (int i = 2; i < N; i++)s[i] = (s[i - 1] + base[i - 1]) % mod;while (q--){int x, y;cin >> x >> y;if (x != 0){pos = ((pos * base[y] % mod + (1 + x - n) * s[y] % mod) % mod + mod) % mod;stk.push({x, y});}else{while (stk.size() && y >= stk.top().second){pos = (pos - (1 + stk.top().first - n) * s[stk.top().second] % mod + mod) % mod;pos = pos * mpow(base[stk.top().second], mod - 2) % mod;y -= stk.top().second;stk.pop();}if (y){pos = (pos - (1 + stk.top().first - n) * s[y] % mod + mod) % mod;pos = pos * mpow(base[y], mod - 2) % mod;pair<int, int> tmp = stk.top();tmp.second -= y;stk.pop();stk.push(tmp);}}cout << pos << '\n';}
}

D.peach

提交链接:蟠桃(peach)

先补$T4$,据说更简单。

分析

有向图,看似是神秘连通性问题+计数。

30分

$O(n2)$枚举$l$,$r$,$O(n)$$check$,$O(n3)$,非常划算。

45分

记录$i$出边及自己的最小下标和最大下标。如果一个区间包含下标$i$,则必然包含$[mn_i,mx_i]$。

枚举$mn$,然后在枚举$mx$的过程中动态维护$\min mn_i,\max mx_i$。复杂度$O(n^2)$。

有部分分的STD,好评!

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5, M = 2e6 + 5;
int c, n, m, x, y, l[M], r[M];
long long ans;
signed main(){ios :: sync_with_stdio(false);cin.tie(0), cout.tie(0);freopen("peach.in", "r", stdin);freopen("peach.out", "w", stdout);cin >> c >> n >> m;for(int i = 1; i <= n; i++) l[i] = r[i] = i;for(int i = 1; i <= m; i++){cin >> x >> y;l[x] = min(l[x], y);r[x] = max(r[x], y);}for(int i = 1; i <= n; i++){int ll = n, rr = 0;for(int j = i; j <= n; j++){ll = min(ll, l[j]);rr = max(rr, r[j]);if(ll < i) break;if(rr > j) continue;ans++;}}cout << ans;
}

100分

呃……并非很懂,但是,思想就是尝试固定左端点或右端点,找另一个性质。

那么,合法区间一定满足$mn_l=l,mx_r=r$。

然后……我也不知道了,粘一下$STD$。

STD

#include <bits/stdc++.h>
using namespace std;const int N = 5e5 + 5, M = 2e6 + 5;
int c, n, m, x, y, l[M], r[M], lt[M], lg[N];
long long ans;
int head[M], tot, fl[N][21], fr[N][21];
bool inst[M], vis[M];
stack<int> stk;struct edge
{int to, nxt;
} e[M << 2];void addedge(int u, int v)
{e[++tot] = {v, head[u]};head[u] = tot;
}
int calc_fl(int l, int r)
{int x = lg[r - l + 1];return min(fl[l][x], fl[r - (1 << x) + 1][x]);
}int calc_fr(int l, int r)
{int x = lg[r - l + 1];return max(fr[l][x], fr[r - (1 << x) + 1][x]);
}int stk2[M], top;signed main()
{ios :: sync_with_stdio(false);cin.tie(0), cout.tie(0);freopen("peach.in", "r", stdin);freopen("peach.out", "w", stdout);cin >> c >> n >> m;for(int i = 1; i <= n; i++) l[i] = r[i] = i;for(int i = 2; i <= n; i++) lg[i] = lg[i >> 1] + 1;for(int i = 1; i <= m; i++){cin >> x >> y;l[x] = min(l[x], y);r[x] = max(r[x], y);}for(int i = 1; i <= n; i++)fl[i][0] = l[i], fr[i][0] = r[i];for(int j = 1; j <= 20; j++)for(int i = 1; i + (1 << j) - 1 <= n; i++){fl[i][j] = min(fl[i][j - 1], fl[i + (1 << (j - 1))][j - 1]);fr[i][j] = max(fr[i][j - 1], fr[i + (1 << (j - 1))][j - 1]);}for(int i = 1; i <= n; i++){while(top && stk2[top] > l[i]) top--;if(l[i] == i) stk2[++top] = l[i];if(i != r[i]) continue;int L = 1, R = i, p = i;while(L <= R){int mid = (L + R) >> 1;if(calc_fr(mid, i) <= i) p = mid, R = mid - 1;else L = mid + 1;}L = 1, R = top; int q = top + 1;while(L <= R){int mid = (L + R) >> 1;if(stk2[mid] >= p) q = mid, R = mid - 1;else L = mid + 1;}ans += top - q + 1;}cout << ans;return 0;
}

C.npy

提交链接:好朋友(npy)

我认为这题并不难,至少我想到了部分性质——LIS和LDS恰有一个交点$a_n$。

那么,就是组合+拼好算,没了……

#include <bits/stdc++.h>
using namespace std;
const int mod = 998244853, M = 1e6 + 5;
int n, a[M * 2], f[M], g[M], b[M], fac[M], inv[M], ls, h[M][2], s[M][2];
inline int ksm(int x, int y)
{int res = 1;while(y){if(y & 1) res = 1ll * res * x % mod;x = 1ll * x * x % mod, y >>= 1;}return res;
}
int C(int n, int m)
{if(n < 0 || m < 0 || n < m) return 0;return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
}
int calc(int ls, int p, int x)
{int res = 0;for(int o = 0; o <= 1; o++){if(h[ls][o] == -1) continue;res = (res + 1ll * s[ls][o] * C(p - ls, x - h[ls][o]) % mod) % mod;}return res;
}
void solve()
{cin >> n;for(int i = 1; i <= 2 * n - 1; i++) cin >> a[i];for(int i = 1; i <= n; i++) b[i] = a[2 * n - i];for(int j = 0; j <= n; j++) f[j] = g[j] = 0;for(int i = 1; i <= n; i++) h[i][0] = h[i][1] = -1, s[i][0] = s[i][1] = 0;h[0][0] = 0, s[0][0] = 1, ls = 0;for(int i = 1; i <= n - 1; i++){if(a[i]){if(a[i] > 0){int s1 = calc(ls, i - 1, a[i] - 1); // ls 贡献到 f[i - 1][a[i] - 1];if(s1) h[i][0] = a[i], s[i][0] = s1;}if(i >= n - a[i] + 1){if(i - (n - a[i] + 1) < i){int s2 = calc(ls, i - 1, i - (n - a[i] + 1));if(h[i][0] != -1 && h[i][0] != i - (n - a[i] + 1) && s[i][0] != 0) h[i][1] = i - (n - a[i] + 1), s[i][1] = s2;else h[i][0] = i - (n - a[i] + 1), s[i][0] += s2, s[i][0] %= mod;}}ls = i;}}for(int i = 0; i <= n - 1; i++) f[i] = calc(ls, n - 1, i);for(int i = 1; i <= n; i++) h[i][0] = h[i][1] = -1, s[i][0] = s[i][1] = 0;h[0][0] = 0, s[0][0] = 1, ls = 0;for(int i = 1; i <= n - 1; i++){if(b[i]){if(b[i] > 0){int s1 = calc(ls, i - 1, b[i] - 1); // ls 贡献到 g[i - 1][b[i] - 1];if(s1) h[i][0] = b[i], s[i][0] = s1;}if(i >= n - b[i] + 1){if(i - (n - b[i] + 1) < i){int s2 = calc(ls, i - 1, i - (n - b[i] + 1));if(h[i][0] != -1 && h[i][0] != i - (n - b[i] + 1) && s[i][0] != 0) h[i][1] = i - (n - b[i] + 1), s[i][1] = s2;else h[i][0] = i - (n - b[i] + 1), s[i][0] += s2, s[i][0] %= mod;}}ls = i;}}int ans = 0;for(int i = 0; i <= n - 1; i++) g[i] = calc(ls, n - 1, i);if(a[n]) cout << 1ll * f[a[n] - 1] * g[a[n] - 1] % mod << '\n';else{for(int i = 0; i <= n - 1; i++)ans += 1ll * f[i] * g[i] % mod, ans %= mod;cout << ans << '\n';}return;
}
int main(){ios :: sync_with_stdio(false);cin.tie(0), cout.tie(0);freopen("npy.in", "r", stdin);freopen("npy.out", "w", stdout);fac[0] = 1;for(int i = 1; i <= 1e6; i++)fac[i] = 1ll * fac[i - 1] * i % mod;inv[(int) 1e6] = ksm(fac[(int) 1e6], mod - 2);for(int i = 1e6; i >= 1; i--)inv[i - 1] = 1ll * inv[i] * i % mod;int t; cin >> t;while(t--) solve();return 0;
}

不明白可以看这篇。

ZYZ28-NOIP-Xiaomao Round 1 题解 - 心灵震荡 - 博客园

密码:$xiao-mao-xi-huan-mo-ni-248224822482$

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

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

相关文章

linux find -exec

find 是 Linux 中一个非常强大的命令行工具,用于在文件系统中搜索文件和目录。-exec 是 find 命令的一个选项,用于指定当找到匹配的文件时,执行的命令。一、find 命令的基本结构 find [路径] [选项] [命令] 其中 -e…

VMware 17 安装 CentOS 7 详细步骤

一、VMware 下载和安装 百度网盘:https://pan.baidu.com/s/1F8-EmFk8oaf2q647zAP35w 提取码: LN66以下为网上搜集到的许可证:MC60H-DWHD5-H80U9-6V85M-8280D(亲测有效)JUO9O-6039P-08409-8J0QH-2YR7F4A4RR-813DK-M…

02.入门篇-开发工具

02.入门篇-开发工具2 开发工具 2.1 开发工具简介开发Java程序必须先安装好 JDK(Java Development Kit),也就是 Java开发工具包,其中包含了常见的开发工具以及 JRE(Java Runtime Environment,其中包含了Java核心库…

2025年【口碑好的/比较好的/靠谱的】配变电站房智能辅控主设备公司推荐排行榜 哪家好/强/靠谱 -------南京品尼科自动化有限公司

2025年【口碑好的/比较好的/靠谱的】配变电站房智能辅控主设备公司推荐排行榜 哪家好/强/靠谱 -------南京品尼科自动化有限公司 在电力行业智能化转型的浪潮中,配变电站房智能辅控主设备作为保障电力设施安全、稳定、…

使用RPA下载文件测试

使用RPA下载文件测试使用RPA下载文件测试

2025年进口二位三通电磁阀厂商权威推荐榜单:进口小口径三通电磁阀/进口单电控三通电磁阀/进口双电控三通电磁阀源头厂家精选

在工业自动化与控制领域,进口二位三通电磁阀凭借其高可靠性、快速响应与长寿命的显著优势,已成为液压系统、气动回路、医疗设备和食品机械等关键应用中的核心控制元件。 随着工业自动化程度的提升和精密控制需求的增…

2025年防水贴缝带实力厂家权威推荐榜单:双面贴缝带/单面贴缝带/道路贴缝带源头厂家精选

在道路养护行业持续向高效、环保方向发展的背景下,防水贴缝带凭借其施工便捷、耐久可靠、经济环保的特点,已成为路面预防性养护的核心材料之一。行业数据显示,中国公路养护里程已占公路总里程的约90%,其中预防性养…

go2视频流获取webrtc

在开始之前,你需要安装 uv。可以通过以下命令安装:curl -LsSf https://astral.sh/uv/install.sh | sh 安装完成后,可以通过以下命令验证 uv 是否安装成功:uv --version 创建虚拟环境 在项目目录下创建一个新的虚拟…

2025年托辊设备定做厂家权威推荐榜单:托辊配件/梳形托辊/槽形托辊源头厂家精选

在工业输送系统持续向智能化、高效化发展的背景下,托辊设备作为输送系统的核心部件,其承载能力、使用寿命与定制化程度直接影响整个生产线的运行效率。为帮助用户精准筛选优质供应商,本文基于企业生产能力、技术实力…

Windows驱动开发系列(1)竹林蹊径这本书有哪些值得看的部分

全文使用Markdown编写,具体请看Markdown 菜鸟教程 一些天天看的概念:WDM / NT 驱动(都是老驱动,淘汰掉了)KMDF/UMDF才是现代化的驱动,本文讲述的是NT或者WDM 这本书阅读宗旨:《竹林蹊径》代码和工具全部已过时,…

博客到底怎么写

博客到底怎么写呢以学习一个新的技术为例首先就是了解这个技术是什么,概述这个标签可以,然后解释这个技术的原理等等然后怎么配置写一下,注意的点是什么,这个配置完之后总结一下配置中的命令的用法总结一下,详细的…

构造题 Codeforces2131H Sea, You copriMe

https://codeforces.com/problemset/problem/2131/H 题解 先探索一下只找一个 pair 怎么做。 对于 \(a_i>1\) 的平凡情况,我们想寻找 \(\sum [\gcd(a_i,a_j)=1]\),来判断是否存在和它互质的。直接套用莫比乌斯反演…

AT AGC004 题解【鸽】

AT AGC004 Editorialinclude <bits/stdc++.h> using i64 = long long; constexpr int N = 1e5 + 7; int n, m; int cnt, ans; int a[N]; std::vector adj[N]; void addedge(int u, int v) { adj[u].push_back(v)…

2025年抓斗清污机制造厂权威推荐榜单:格栅式清污机/耙斗式清污机/耙齿清污机源头厂家精选

在水电站、泵站及市政排水设施中,抓斗清污机作为拦截并清除水体中悬浮物与漂浮垃圾的关键设备,其运行的可靠性与清污效率直接关系到整个水利设施的安全与水质保障。 随着国家对水环境治理与水利设施安全要求的不断提…

【Java Web学习 | 第1篇】前端 - HTML - 详解

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

2025年一拖四中央空调品牌权威推荐榜单:6赫兹中央空调/最值得买的中央空调/中央空调品牌精选

据行业数据显示,2024年全球多联机系统收入约为255.9亿美元,并预计2031年将达到522.2亿美元,期间年复合增长率10.8%。这一增长背后,是消费者对空调需求从基础制冷升级为节能、健康、智能、一体化的综合考量。 本文将…

2025年连续梁防落梁装置源头厂家权威推荐榜单:防落梁装置施工/防落梁装置缓冲器/链环式防落梁装置源头厂家精选

在交通基础设施安全标准持续提升与抗震防灾要求日益严格的背景下,连续梁防落梁装置作为保障桥梁结构安全的核心部件,其抗震性能、缓冲效能与安装便捷性已成为桥梁工程的重点考量。为帮助工程单位精准筛选优质供应商,…

运输货物题解

小 Z 要用 \(n+1\) 只骡子运送 \(k\) 种物资。每只骡子可以任选物资运输(也可以选择运输 \(0\) 种物资)。 由于骡子并不是马,所以 没有任何一种物资能够同时被 第 \(0\sim n-1\) 只这 \(n\) 只骡子运输。 由于骡子并…

K8S集群1.30版本怎么执行命令进入容器

K8S集群1.30版本执行命令需要在Pod和命令之间加--执行 示例如下 # kubectl exec -it -n default zentao-59b4d4448f-hwpvt -- bash说明需要把命名空间写在pod前面 pod命和需要执行的命令直接加--即可

不同行业企业如何选择可观测产品?

在数字化转型的深水区,企业IT架构正从传统单体应用向分布式、云原生、国产化混合架构演进。一次简单的接口调用可能涉及数十个服务节点,传统的监控手段已难以满足需求。 根据Gartner最新研究报告,到2026年,70%成功…