2025-11-21 hetao1733837的刷题记录

news/2025/11/22 16:29:45/文章来源:https://www.cnblogs.com/hetao1733837/p/19257089

2025-11-21 hetao1733837的刷题记录

2025-11-21 hetao1733837的刷题记录

LG14415/LOJ3004 [JOISC 2015] Inheritance

原题链接1:[JOISC 2015] Inheritance

原题链接2:「JOISC 2015 Day 4」Inheritance

分析

呃……居然tag是二分!我们考虑单调性在哪……发现对于一条边,若其不为第$K$次操作的边权(比较小),则不为所有小于$K$操作的删边。考虑怎么$check$,模拟$Kruskal$的过程,通过$K$个并查集进行维护即可。这个思想是真的🐂🍺!

HE一下。

正解

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1005, M = 300005, K = 10005;
struct node{int a, b, c, id;
}e[M];
int fa[K][N], sz[K][N], ans[M];
bool cmp(node x, node y){return x.c > y.c;
}
int getfa(int k, int x){return x == fa[k][x] ? x : fa[k][x] = getfa(k, fa[k][x]);
}
void merge(int k, int x, int y){x = getfa(k, x);y = getfa(k, y);if (x == y)return ;if (sz[k][x] > sz[k][y])swap(x, y);fa[k][x] = y;sz[k][y] += sz[k][x];
}
int n, m, k;
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m >> k;for (int i = 1; i <= m; i++){cin >> e[i].a >> e[i].b >> e[i].c;e[i].id = i;}sort(e + 1, e + m + 1, cmp);for (int i = 1; i <= n; i++){for (int j = 1; j <= k; j++){fa[j][i] = i;sz[j][i] = 1;}}for (int i = 1; i <= m; i++){int u = e[i].a, v = e[i].b, w = e[i].c, id = e[i].id;int l = 1, r = k; int pos = 0;while (l <= r){int mid = (l + r) >> 1;if (getfa(mid, u) != getfa(mid, v)){pos = mid;r = mid - 1;}else{l = mid + 1;}}ans[id] = pos;if (pos)merge(pos, u, v);}for (int i = 1; i <= m; i++)cout << ans[i] << '\n';
}

LG14412/JOI3001 [JOISC 2015] AAQQZ

原题链接1:

原题链接2:

分析

根本不会,mhh推了两篇题解,粘在这。

AT_joisc2015_h 题解 - Xttttr - 博客园

#6 2023.11.26 - ZSH_ZSH - 博客园

正解

#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
int n, c, a[N], cntl[N], cntr[N], dp[N][N], ans;
int calc(int l, int r, int lim){for (int i = 0; i <= c; i++)cntl[i] = cntr[i] = 0;if (l < 1 || l > n) return 0;cntl[a[l]]++;int L = l, suml = 1, sumr = 0, maxn = 0, cnt = 0;while (L > 1 && a[L - 1] >= a[L]){cntl[a[--L]]++;suml++;}int R = a[L];L = 0;for (int i = r; i <= n; i++){cntr[a[i]]++;if (a[i] < lim)return maxn;if (a[i] == lim)cnt++;else if (cntr[a[i]] > cntl[a[i]]){while (R > a[i] && R >= 0){suml -= cntl[R];R--;}} else{while (L <= c && cntl[L] <= cntr[L]){sumr += cntl[L];L++;}}int add = (L <= c) ? cntr[L] : 0;int len = min(sumr + add, suml);if (len + cnt == i - r + 1 && l >= len && l - len >= 0 && i + 1 <= n + 1)len += dp[l - len][i + 1];maxn = max(maxn, 2 * len + cnt);}return maxn;
}
void solve(){for (int i = 0; i <= n + 1; i++)for (int j = 0; j <= n + 1; j++)dp[i][j] = 0;for (int i = 1; i <= n; i++){for (int j = i; j <= n; j++){dp[i][j] = 0;if (a[i] == a[j])dp[i][j] = dp[i - 1][j + 1] + 1;}}for (int i = 1; i <= n; i++)ans = max(ans, 2 * dp[i][i] - 1 + calc(i - dp[i][i], i + dp[i][i], 0));for (int i = 1; i < n; i++)ans = max(ans, 2 * dp[i][i + 1] + calc(i - dp[i][i + 1], i + dp[i][i + 1] + 1, 0));for (int i = 1; i <= n; i++){int minn = 0;for (int j = i + 1; j <= n; j++){if (a[j] < a[i]) {minn = a[j];break;}}ans = max(ans, calc(i, i + 1, minn));}
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> c;for (int i = 1; i <= n; i++){cin >> a[i];}solve();for (int i = 1; i <= n; i++)a[i] = c - a[i] + 1;reverse(a + 1, a + n + 1);solve();sort(a + 1, a + n + 1);int sum = 0;for (int i = 1; i <= n; i++){if (a[i] != a[i - 1]){ans = max(ans, sum);sum = 0;}sum++;}ans = max(ans, sum);cout << ans;return 0;
}

LG14413/LOJ [JOISC 2015] Card Game Is Great Fun

原题链接1:[JOISC 2015] Card Game Is Great Fun - 洛谷

原题链接2:「JOISC 2015 Day 3」Card Game Is Great Fun

分析

14点38分

$DP$是一眼的吧……但是我好像并不会设计状态和转移,稍考一会。

14点39分

想到fqh讲的一个trick,当时是矩阵长宽连边,此题我们难道可以花色点数连边?

那么,我们会建成一张图?这不是废话吗?咦,$V_i\ge 1$似乎可以贪心的$DP$一下?我在写什么?

那,建出图,我们找最长链即可?这不是蓝题吗?

但是,问题在于建图,这样是$O(n^2)$难道要运用另一个限制条件——只取第一或第三个?何意味?

14点50分

何意味啊?居然是高维$DP$!

既然限制了只能取第一或第三,那么,我们就把他计入状态!

即设$f_{i,j}$表示当前序列的第一个元素位置为$i$,第三个元素位置为$j$。但是,选第三个直接转移到$f_{i,j+1}$,但是选第一个没法转移,不知道$i$和$j$之后选哪个。

那么,多加一维$k$表示前三个元素怎么样?也不太行,因为不知道栈顶牌的具体信息。

那么,再加一维吧🤮,设$dp_{i,j,k,l}$表示上一次选择了原序列的第$l$张牌。选第一张即可转移到$f_{j,k,k+1,i}$,选第三张即可转移到$f_{i, j, k+1, k}$。显然,状态是 $O(n^4)$无法满足,/(ㄒoㄒ)/~~蓝题别搞!

发现$k=max(j,l)$,那不就省略一维了吗?

直接跑满!

然后呢,我想说,一些DP题实际上是记忆化搜索的手笔,所以,不会DP时,可以尝试写暴力,然后记忆化一下,说不定有客观的分数!

总结

限制扔进状态,观察数据范围大略估计状态维数,然后拿下!

正解

何意味,少开个long long卡我快20分钟,居然报TLE!

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505;
int f[N][N][N];
int c[N], a[N], v[N];
int n;
bool check(int x, int y){if (!x || !y) //最开始和最结尾随便选 return true;if (c[x] == c[y] || a[x] == a[y])return true;return false;
}
int dfs(int i, int j, int k, int l){if (f[i][j][l] != -1){return f[i][j][l];}int ans = 0;if (i <= n && check(l ,i)){ans = max(ans, v[i] + dfs(j, k, k + 1, i));}if (k <= n && check(l ,k)){ans = max(ans, v[k] + dfs(i, j, k + 1, k));}f[i][j][l] = ans;return f[i][j][l];
}
int read(){char c = getchar();int x = 0, f = 1;while (c < '0' || c > '9'){if (c == '-')f = -1;c = getchar();}while (c >= '0' && c <= '9'){x = x * 10 + (c - '0');c = getchar();}return x * f;
}
signed main(){n = read();for (int i = 1; i <= n; i++){c[i] = read();a[i] = read();v[i] = read();}memset(f, -1, sizeof(f));printf("%lld", dfs(1, 2, 3, 0));
}

LG3615/LOJ2734 [JOISC 2016] Toilets

原题链接1:[JOISC 2016] 如厕计划

原题链接2:「JOISC 2016 Day 2」女装大佬

分析

记女生为+1,男生为-1,那么,发现每个男生需要"消耗"一个女生以保证两个厕所都不为空($2N$个人$N$个厕所,空依次就得崩)。那么,转化为后缀和,当后缀和小于$-1$时,就需要调整,然后吃吃吃,就做完了?何意味。

正解

#include <bits/stdc++.h>
using namespace std;
const int M = 100005;
int m;
long long n, ans = -1, k[M];
string s[M];
int main(){cin >> n;cin >> m;for (int i = 1; i <= m; i++){cin >> s[i] >> k[i];reverse(s[i].begin(), s[i].end());}long long tmp = 0;for (int i = m; i >= 1; i--){long long sum = 0, v = 1e9;for (int j = 0; j < s[i].length(); j++){if (s[i][j] == 'F')sum += 1;elsesum += -1;v = min(sum, v);}if (sum >= 0){ans = min(ans, tmp + v);tmp += sum * k[i];} else{tmp += sum * (k[i] - 1);ans = min(ans, tmp + v);tmp += sum;}}ans = -ans - 1LL;if (tmp < 0)cout << -1;elsecout << ans;
}

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

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

相关文章

2025 最新腻子粉厂家推荐!环保与性能双优腻子粉品牌排行榜,涵盖母婴级 / 工程级产品权威测评儿童级健康腻子粉/工程腻子粉/工程腻子粉施工/建筑腻子粉公司推荐

引言 在墙面装饰基层处理中,腻子粉的品质直接决定装饰效果与使用寿命,而市场产品良莠不齐,环保不达标、粘结力不足等问题频发。为精准筛选优质产品,本次榜单依托国际涂料协会(ECCA)最新测评标准,结合全球建材质…

java freemarker(ftl)模板填充导出PDF,支持中文乱码

添加依赖<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency><dependency><group…

2025年广东洁净度检测公司权威推荐榜单:广东医院(诊所)洁净环境检测/广东空气净化器检测平台/广东新风机检测服务机构精选

在生物医药、电子半导体与医疗卫生等行业,生产与研发环境的洁净度直接关系到产品质量与安全。专业洁净度检测正成为保障产业高质量发展的关键环节。 洁净度检测通过对空气中悬浮粒子、微生物浓度以及相关环境参数的精…

C# Avalonia 18- ControlTemplates - FlipPanelTest

C# Avalonia 18- ControlTemplates - FlipPanelTestFlipPanel2类是负责控制逻辑。 FlipPanel2.csusing Avalonia; using Avalonia.Animation.Easings; using Avalonia.Controls; using Avalonia.Controls.Metadata; us…

2025 最新仿石漆厂家权威推荐榜:真石漆 / 绿色环保仿石漆优质品牌精选仿石漆/真石漆/绿色真石漆/有资质的仿石漆公司推荐

引言 随着建筑装饰对质感与环保的双重追求,仿石漆已成为外墙装饰的主流选择,但市场品牌混杂、品质良莠不齐的问题仍困扰采购者。本次榜单基于国际涂料协会(IFPA)测评标准,结合 3000 小时耐候性测试、环保指标检测…

2025年纱线烘干机制造厂权威推荐榜单:气流烘干机/筒子烘干机/快速烘干机源头制造厂精选

在纺织产业升级和技术进步的推动下,纱线烘干机以其高效节能和稳定可靠的性能特点,正成为纺织企业提升产品质量和生产效率的关键设备。 根据纺织机械行业数据统计,2024年中国纺织烘干设备市场规模达到68亿元,年均增…

CTF逆向Re:零基础系统性入门教程-5-动态调试

目录 动态调试是什么 先说一些基础概念 为什么要动态调试 怎么动态调试 1.动态调试代替思考 2.动态调试劫持控制动态调试是什么 简单说,就是运行程序,运行中监控程序的运行流程,数据变化,和静态分析的对比如下场景…

CF1817B Fish Graph

题目大意 定义了一个鱼图,求是否存在并输出环和两点的边。 题意分析 直接暴力,但是需要加一点点小优化,具体如下:环的检测:我们首先需要在图中找到一个环,如果遇到了一个已经访问过的节点,并且该节点不是当前路…

CF1630C Paint the Middle

最简题意 给定一个长度为 \(n\) 的数组,数组中的元素初始值都为零。可以通过以下操作来修改颜色:选择三个元素 \((i,j,k)\) 满足 \(1\leq i<j<k \leq n\),并且保证 \(a_i=a_k\),同时 \(c_i=c_k=0\),那么可以…

CF1707B Difference Array

题目大意 题目大意非常简短,就是给你一个数组。每次同时进行 \(a_i=a_{i+1}-a_i\) 的操作,求最后留下的一个数是什么,如下:计算数组中相邻两个元素的差值,得到新的数组。 对新数组排序,然后将其替换。 重复此过程…

P3113 [USACO14DEC] Marathon G

题目大意 马拉松路线由 \(N\) 个检查点组成,选手必须按顺序经过每个检查点。有两种操作:更新某个检查点的坐标。 查询从检查点 \(X\) 到 \(Y\) 的最短路径长度,允许跳过其中一个中间。要求高效处理这些操作。 思路分…

封装map和set(红黑树作为底层结构如何完成map和set插入遍历)

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

淮安市一对一辅导机构权威排行榜推荐:2026家教机构穿透式测评!

为贴合淮安市小学、初中、高中学生对语文、数学、英语、理化生、史地政全部学科一对一家教课外补习的核心需求,解决家长选择辅导培训教育机构的核心困扰——教师资质虚实难辨、教学方案千篇一律、隐形消费层出不穷、孩…

崖山数据库导出 - 华

崖山数据库导出将F:\A_MAZ\A_package\yashandb-client-23.4.1.102-windows-amd64\binF:\A_MAZ\A_package\yashandb-client-23.4.1.102-windows-amd64\lib放入环境变量 然后在F:\A_MAZ\A_package\yashandb-client-23.4.…

南昌航空大学-软件学院-23207201-吕玉英

题目集 1-3电梯调度程序实践与反思 一、前言 过去这些天里,我们开始了为期三周的电梯调度大作业学习,这三次题目集围绕电梯调度系统展开渐进式设计,体现了从基础到复杂、从单一功能到系统架构的完整学习路径。第一次…

AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成

AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成 AI-Compass 致力于构建最全面、最实用…

Prufer序列与Cayley公式

Cayley公式:n个节点的带标号的无根树有n^(n-2)个。 证明 Prufer序列与树的转换 重要性质: prufer序列中某个编号出现的次数+1就等于这个编号的节点在无根树中的度数。

MX Round 27 解题报告

MX Round 27 解题报告 T1 观察一:对于区间 \([l,l]\),它如果不为 \(1\),那么有 \(a_i=w_{l,l}\);否则有 \(a_i=0\) 或 \(a_i=1\)。 观察二:对于第 \(i\) 个和第 \(i+1\) 个无法被确定的数,通过查询区间内已知的最…

11.22模拟赛

T1 给定一棵 \(n\) 个点的树,点有颜色,问有哪些 \(u\) 满足,对于任意的 \(v\),路径 \((u,v)\) 上不出现重复颜色。 对于所有数据,满足 \(1 \leq n \leq 2 \times 10^5, 1 \leq c_i \leq n\)。 题解 考虑用样的颜色…

从超时到秒杀:三路快排解决数组排序的完整实战与反思

从超时到秒杀:三路快排解决数组排序的完整实战与反思在算法学习中,“数组排序”是绕不开的基础问题,但看似简单的需求,却藏着对时间复杂度、空间复杂度的深度考量。本文结合我在 LeetCode “数组升序排列” 问题中…