首页 > 其他分享 >题解——2023年码谷提高组模拟赛1016

题解——2023年码谷提高组模拟赛1016

时间:2023-10-17 19:45:22浏览次数:44  
标签:www 码谷 int 题解 自环 https 2023 com dp

题解——2023年码谷提高组模拟赛1016

一套被各种转来转去的题;参考:https://blog.csdn.net/liuziha/article/details/127353981https://www.luogu.com.cn/blog/Chen5201314/xiao-nei-bi-sai-1025-zong-jie-ti-xiehttps://www.cnblogs.com/Clyfort/articles/0927-test-solution.html 这三篇题解。

A. 小 O 的珠子(bead)

网址:https://www.luogu.com.cn/problem/U372849

题意

给定 \(n\) 个字符串 \(s_i\),求这些字符串的一种排列,使得拼接之后的字符串字典序最小

正解

第一反应是按字典序排列,但是有 Hack 数据:

2
aba
ab

按照字典序排列是 ababa,而正解是 abaab

问题出在哪里?本人一开始想着特判,但是足以把人绕懵。

于是考虑重新设计排序方式,重新定义字符串比较 \((<)\) 为(其中 \(s_1,s_2\) 表示字符串,\(+\) 表示字符串连接):

\(\boxed{s_1(<)s_2=s_1+s_2<s_2+s_1}\)

证明:要证什么?怎么证明?为什么要证?打表就完了。

实在要证明的话要考虑:严格弱序Strict weak orderings

代码

#include <bits/stdc++.h>
using namespace std;
inline bool cmp(const string a, const string b) {
    return a + b < b + a;
} signed main() {
    vector<string> str; str.clear();
    int n; string tmp; cin >> n;
    for (int i = 1; i <= n; ++i) cin >> tmp, str.push_back(tmp);
    sort(str.begin(), str.end(), cmp);
    string res; for (string i : str) res += i;
    cout << res << endl;
    return 0;
}

B. 王国的传送门(gate)

网址:https://www.luogu.com.cn/problem/U372850

题意

有 \(n\) 个节点,\(n\) 条边单向边的连通图,现可以改变一些边的目的地,求最小的更改次数,使得节点 \(\forall u\in[1,n]\) 经过 \(k\) 步可以到达节点 \(1\)。

部分分

有 \(15\%\) 的数据,\(k=1\)。

只能走一步,所以只要没连到节点 \(1\) 的边都得改,枚举即可。

正解

可以分两种情况讨论:

0x01

有边 \((1,1)\),即 \(1\) 的自环;剩下 \(n-1\) 边,\(n\) 个点还是联通的,因此这是一个树(排除 \(1\) 的自环的话)。

从 \(1\) 开始,一定可以走 \(k\) 步回到 \(1\),也就是一直转圈就可以。

从其他点 \(x\) 出发,如果它到 \(1\) 的距离 \(\le k\),也一定能在 \(k\) 步到达 \(1\),即先走 \(\text{dis}(x,1)\) 步到达 \(1\),然后再在 \(1\) 号点绕 \(k-\text{dis}(x,1)\) 步。

因此问题转换为,求最少改几个点,使得节点 \(\forall x\in[2,n],\text{dis}(x,1)\le k\)。

因此可以一遍 DFS,对于每个节点 \(x\),如果它的子树中到它的最大距离 \(\ge k\),就连一条边 \((x,1)\)。

特别的,如果 \(x=1\),则一定不能加边,因为已经有自环了;如果 \(f_x=1\),也不能加边,因为已经有一条边 \((x,1)\) 了。

0x02

没有边 \((1,1)\),即原图是一个基环树(如果不是就不连通了)。

可以大胆猜测,一定需要一条边 \((1,1)\),为什么呢?(感性理解

假设我们已经通过若干次操作,使得现在的图 \(\mathrm{G}'\) 满足条件,且没有 \((1,1)\) 的自环,即 \(f_1\neq1\)。

那么此时一定有 \(\text{dis}(f_1,1)=k\),且 \(1\) 要回到 \(1\) 只能经过图中的环 \(1\rightarrow f_1\rightarrow f_{f_1}\rightarrow\cdots\rightarrow t\rightarrow1\),则一定有 \(x\in[f_{f_1},t],\text{dis}(x,1)<k\),而这些点一定有点无法在 \(k-\text{dis}(x,1)\) 步恰好回到点 \(1\)。

因此,必须要有边 \((1,1)\),即 \(1\) 的自环。

问题转换为上一个情况,当然,为了补充自环 \((1,1)\),这一种情况还要再 \(+1\)。

代码

#include <bits/stdc++.h>
using namespace std;
int pos1, n, k, v, dp[100010], ans;
vector<int> g[100010];
void dfs(int u, int fa) {
    dp[u] = 1; for (int v : g[u]) dfs(v, u), dp[u] = max(dp[u], dp[v] + 1);
    if ((u != 1) && (dp[u] > k || (dp[u] == k && fa != 1))) ++ans, dp[u] = 0;
} signed main() {
    cin >> n >> k >> pos1;
    for (int i = 2; i <= n; ++i) cin >> v, g[v].push_back(i);
    dfs(1, -1); printf("%d\n", ans + (pos1 != 1));
    return 0;
}

C. 黑白树(bwtree)

网址:https://www.luogu.com.cn/problem/U372853

题意

一棵 \(n\) 个节点的树,初始所有边都是黑色的。每次可以选择一条全黑的路径,删掉其中一条边,然后在路径的两个端点之间连一条白色的边;求最后能否得到目标形态(全白的边)的树。

部分分

image

正解

《正难则反》——忘了是我的哪个网课老师了

D. 反复横跳(jump)

网址:https://www.luogu.com.cn/problem/U372866

题意

给定 \(m\) 个字符串 \(S_1,S_2,\cdots,S_m\),令 \(n = \sum_{i\in[1,m]}|S_i|\),以及一个序列 \(a_1,a_2,\cdots,a_n\)。

你需要维护一个关于任意字符串的 \(f\) 函数,初始时 \(f\) 值全为 \(0\)。

进行 \(q\) 次操作,每次操作有以下两种:

  1. 给定 \(x\),对于任意 \(S_k\),若其等于 \(S_x\) 的一个后缀 \(S_x[i,|S_x|]\),则令 \(f(S_k)\) 加上 \(a_i\)(本质相同的 \(S_k\) 只加一次);
  2. 给定 \(x\) ,询问 \(f(S_x)\)。

其中,\(S[l,r]\) 表示将 \(S\) 从左往右数第 \(l\) 到第 \(r\) 个字符顺次连接得到的字符串。

分析

我在读懂题的边缘反复横跳

PS

《我分类讨论到最后,发现第一类属于第二类,第三类包含第二类,第四类不存在》

image

标签:www,码谷,int,题解,自环,https,2023,com,dp
From: https://www.cnblogs.com/RainPPR/p/sulution-magu-s1016.html

相关文章

  • To_Heart—总结——没有鸟会为雪花祈祷[SCP2023游寄]
    睡了一个多小时。......
  • 2023/10/17 路由器学习笔记
    路由器 pc1pingpc2环境准备:1、为pc1/pc2添加IP地址、子网掩码与网关。 2、为AR1/AR2添加ip3、配置静态路由(iproute-static) 4、检查路由表是否配置成功(iprouting-table) 5、配置成功,接下来是否可以ping通 成功!三台路由配置 1、为pc1/pc2/pc3添......
  • 每日总结2023年10月17日
    把这段时间学习的内容总结一下:首先是对于SpringBoot的请求和响应,然后是Mybatis的学习,主要就是一个Mapper注解和XML映射文件的学习使用,这极大的提高了我的开发效率。大数据这边跟着老师的节奏做了一个result项目的数据清洗和展示,能够搞懂一点前端的Ajax内容,加深了HiveQL的语言学习......
  • 「BZOJ2505」tickets 题解
    preface网上目前还没看到我的方法,就大概讲一下做法solution首先想到贪心,考虑\([l,r]\)的最大次数,一定是找到最小的\(x\)满足\(l\simx\)的位数的和大于等于\(k\),然后递归的求解\([x+1,r]\),易证。还是考虑将\(Query(l,r)\)拆分成\(Query(1,r)\)和\(Query......
  • TensorFlow全栈开发工程实践——做一个全智全能算法工程师 pdf电子版2023 王艳铭
    TensorFlow全栈开发工程实践——做一个全智全能算法工程师pdf电子版王艳铭出版年: 2023-6ISBN: 9787522615950下栽连接《TensorFlow全栈开发工程实践——做一个全智全能算法工程师》这本书最大的特点就是通俗易懂,全面、详细和实用。与同类书籍的就某一分支流水账式详述、不能突......
  • 搜索引擎与程序化广告:原理、设计与实战pdf电子版2023 杨敏
    搜索引擎与程序化广告:原理、设计与实战pdf电子版2023杨敏出版年: 2023-9ISBN: 9787115617002下栽连接通读全书,可以感受到的是作者多年的工作经验的汇集和多方面的技术积累,不仅让我了解了当前多种流行的数据结构的实现原理和一些技术的底层实现,更让我感受到这些我们耳熟能......
  • 2023年石门中学NOIP模拟测试(2023.10.17)
    原题大战,还是\(4\)道计数...放个头图:一蓝一紫两黑,简单且原题0.o?出模拟赛搬原题演都不演了,他真的我哭死。那这总结不写也罢T1\(n\leq10^3\)。简单来说,要选出子序列满足相同颜色连续的方案数。签到题,但写了\(\text{1h}\)的我是sb。直接大力状压,设\(dp_{i,s,c}\)表......
  • 2023.10.14 总结
    T1题面:给\(n\)个数染色,要求使\(|i-j|\)为质数的两个数染的色不能一样,求任意一种染色方法。\(n\le6\)时直接打表,之后模拟一下。容易发现,\(2\)是质数中唯一一个偶数,所以我们可以\(1234\)连续染色,由于\(4\)是偶数且大于\(2\),所以差为质数的颜色不会相等。最后输出......
  • Newstar CTF 2023 week2 pwn
    1.ret2libc发现存在poprdi观察main函数,可以利用puts函数泄露libcfrompwnimport*fromLibcSearcherimport*context(os="linux",arch="amd64",log_level="debug")elf=ELF('/home/miyu/Desktop/ret2libc')p=remote("node4.b......
  • Windows Server 2016 OVF, updated Oct 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedOct2023(sysin)-VMware虚拟机模板2023年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......