CF2000 A~C 题解

news/2024/9/12 16:09:10/文章来源:https://www.cnblogs.com/dengstar/p/18372706

Codeforces Round 967 (Div. 2) 题解(未完待续)

唐完了,B 构造不会,C 交互不会,整场爆切 \(1\) 题喜提 \(-115\) rating 强势上灰!我还会什么?

I. 2001A - Make All Equal

先找出答案的下界。设众数为 \(x\),其出现的次数为 \(\operatorname{cnt}(x)\)。由于每次操作只能删除一个数,答案不可能小于 \(n - \operatorname{cnt}(x)\)

下面证明这个下界是可以达到的。用 \(y\) 代表所有的非众数,那么在非众数被删光之前,序列可以表示成 \(x \dots x, y \dots y, \dots\) 之类 \(x\)\(y\) 的连续段交替出现的形式。只需证明一定存在一对相邻元素(这里的相邻指环上的相邻)满足前者小于后者即可。反证法,如果不存在,则 \(x > y > \cdots\)。由于序列是一个环,所以可以推导出 \(x > x\),这是不可能的,故得证。

代码

II. 2001B - Generate Permutation

我是傻逼,我没做出来这题

先考察满足要求的序列有什么性质。可以发现(事实上,我并没有发现),对于前向(从左往右)的打字员来说,假设他已经打出了 \(x\),要打 \(x + 1\),只有 \(\operatorname{pos}_x > \operatorname{pos}_{x+1}\) 时他才要按一次回车(其中 \(\operatorname{pos}_x\) 表示 \(x\) 的下标)。因此他按回车的次数 \(c_1 = \sum_{i=1}^{n-1} [\operatorname{pos}_x > \operatorname{pos}_{x+1}]\)

(这里应该模拟一下打字的过程才能更顺理成章地发现这个结论:假设我已经打出了 \(x\),要打 \(x + 1\),我能直接移动然后打出来,还是不得不回车?显然,只有 \(x + 1\)\(x\) 前面时才要回车,这就对应了 \(\operatorname{pos}_x > \operatorname{pos}_{x+1}\)。这样想的话,这个结论并不难得出,但是我为什么没想到呢?)

同样的,对于反向(从右往左)的打字员,只有 \(\operatorname{pos}_x < \operatorname{pos}_{x+1}\) 时他才要按一下回车,因此他按回车的次数 \(c_2 = \sum_{i=1}^{n-1} [\operatorname{pos}_x < \operatorname{pos}_{x+1}]\)

合法的序列应该让这两个值相同。显然,对于 \(x\)\(x + 1\),要么 \(\operatorname{pos}_x > \operatorname{pos}_{x+1}\) 成立,要么 \(\operatorname{pos}_x < \operatorname{pos}_{x+1}\) 成立,所以 \(c_1 + c_2 = n - 1\),因此 \(c_1 = c_2 = \dfrac{n-1}{2}\)。这就说明 \(n\) 是偶数时一定没有合法方案。

\(n\) 是奇数时,可以手模出许多合法的方案。以 \(n = 7\) 为例,一种好想的思路是:先用一堆降序的数把 \(c_1\) 给占满,比如 \(7, 6, 5, 4\)。那么剩下的数必须是升序的,否则会让 \(c_1 > \dfrac{n-1}{2}\)。直接填进去即可: \(1, 2, 3, 7, 6, 5, 4\)。(你会发现 \(7, 6, 5, 4, 1, 2, 3\) 是不可行的,因为 \((3, 4)\) 这一对让 \(c_1\) 变大了)。

因此,\(n\) 是奇数时, \({\color{blue}1, 2, \dots, \left\lfloor \dfrac{n-1}{2} \right\rfloor,} {\color{red}n, n-1, \dots, \left\lfloor \dfrac{n+1}{2} \right\rfloor}\) 是一个合法的方案。这里用不同颜色区分构造时分别填入的两段。

void solve()
{int n;cin >> n;if((n & 1) == 0){cout << -1 << endl;return;}vector<int> ans(n);iota(ans.begin(), ans.end(), 1);reverse(ans.begin() + (n/2), ans.end());for(int x: ans) cout << x << ' ';cout << endl;
}

代码

III. 2001C - Guess The Tree

下面是官方题解的思路。我自己想不出来这个做法,所以不知道用什么语言来引入。

把点划分为两个点集 \(A\)\(B\)\(A\) 中的点是知道其内部边集的点,\(B\) 中的点是不知道的。

初始时,任意让一个点进入 \(A\) 中(例如 \(1\)),\(B\) 是剩下的 \(n-1\) 个点。

我们的策略是:每次把一个新的点加入到 \(A\) 中。这个点必须和原来 \(A\) 中的某个点有连边,否则根本无法把它加入 \(A\)

任远点 \(u \in A\)\(v \in B\)。查询 \(u, v\) 的中点 \(x\)。如果 \(x \in A\),则令 \(u \gets x\),否则令 \(v \gets x\)。这里的要义是,时刻保证 \(u \in A\)\(v \in B\)。最终当 \(u = x\) 时,就表明 \(u\)\(v\) 之间有边相连,可以更新答案的边集。由于我们保证了 \(v \in B\),所以可以把 \(v\) 加入到 \(A\) 中,并在 \(B\) 中删掉 \(v\)

这里的查找类似二分,每次找到一个新点的查询次数不会超过 \(\log n\),总次数不超过 \(n \log n\),可以通过此题。

但是我不知道我自己该如何想出这些东西

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

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

相关文章

本地快速安装运行史上最强开源LLaMa3大模型

https://liaoxuefeng.com/blogs/all/2024-05-06-llama3/史上最强开源AI大模型——Meta的LLaMa3一经发布,各项指标全面逼近GPT-4。它提供了8B和70B两个版本,8B版本最低仅需4G显存即可运行,可以说是迄今为止能在本地运行的最强LLM。 虽然LLaMa3对中文支持不算好,但HuggingFac…

第二章 redis环境安装与配置

redis环境安装 redis的官方只提供了linux版本的redis,window系统的redis是微软团队根据官方的linux版本高仿的。 官方原版: https://redis.io/ 中文官网:http://www.redis.cn 1、下载和安装 下载地址:https://github.com/tporadowski/redis/releases使用以下命令启动redis服务…

CVSS(Common Vulnerability Scoring System)打分规则解读

CVSS(Common Vulnerability Scoring System)提供了一种根据漏洞的主要特征进行打分,反映其严重性的方法。CVSS 已成为被广泛使用的标准。 下面是CVSS 3.1版本计算器的界面截图,本文对Base Score的打分标准做解读,并提供一些建议。同时会列出每个维度选项的翻译。 Attack V…

插入排序详细解读

插入排序详细解读 图解 第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。第二轮:第三位置的 9 比前一位置的 7 大,无需交换位置。第三轮:第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。第四轮:第五位置的 1 比前一位置的 9 小,交换位置,再依次往前比…

一张图看懂SAP主要流程

一张图看懂SAP主要流程

第一章 redis简单介绍

一、引言 在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而…

第17章_反射机制

该篇笔记,是因为想重新学一下Spring Cloud 和Spring Cloud Alibaba框架,但是b站尚硅谷的最新课程,使用SpringBoot3作为,单体服务的框架,而SpringBoot3最低要求JDK17,所以必须要学一下JDK8-JDK17之间的新特性。本来只想看,宋红康老师课程的第18章JDK8-17新特性,但是觉得…

qt静态编译 全自动编译qt静态库 qt5 windows安装qt (2024.2.23)

全自动编译qt5静态库(2024.2.23) 本教程是从无到有配置qt.io和vcpkg实现全自动编译qt5的静态库,使得您可以静态编译qt项目 0. 安装Visual Studio 2022 这个我就不多解释了,直接去官网下载社区版本,勾选使用C++的桌面开发安装好就行 1. 安装qt.io的开发环境 1.1 下载在线安装…

【python】面向对象之类成员(字段,方法)

1.类的成员可以分为三大类:字段、方法和属性注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。2.字段字段包括:普通字段和静态字段,他们…

2024.8.21

DATE #:20240821 ITEM #:DOC WEEK #:WEDNESDAY DAIL #:捌月拾捌TAGS< BGM = "琴师--要不要买菜" > < theme = oi-contest > < [NULL] > < [空] > < [空] >``` 此情可待成追忆,只是当时已惘然 -- 《锦瑟》 李商隐 ```T1 试卷答案(ex…

回溯part011

今天学习了回溯算法:基本知识,关键是那个模板 组合问题:画树状图+简单的剪枝 电话号码的组合问题,和经典组合问题的差别在于取不同集合中的组合,注意如何有限制的在for循环之前确定循环哪个数组,通过树状图确定for循环中i的大小。1. 基本知识回溯法也可以叫做回溯搜索法,…

『模拟赛』暑假集训CSP提高模拟26

『模拟赛记录』暑假集训CSP提高模拟26Rank 打得一般,倒数第二场了。。A. 博弈 直接搬了牛客的一套题。 一眼没思路,模了一会放弃直接去打 T2 了,后来把 \(\mathcal{O(n^2)}\) 暴力 打了拿 30pts。 正解用到了异或哈希。首先确定合法的数量即为总对数 \(\frac{n(n-1)}{2}\) 减…