首页 > 其他分享 >Codeforces Round 902 (Div. 1, based on COMPFEST 15 - Final Round) A~D

Codeforces Round 902 (Div. 1, based on COMPFEST 15 - Final Round) A~D

时间:2023-10-08 23:55:07浏览次数:42  
标签:902 based 黑点 复杂度 我们 即可 权值 Round

A. Helmets in Night Light

首先注意到一个关键性质 \(b_i \geq 1\),这就意味着当我们花 \(p\) 的代价解锁了 \(b_i\) 最小的后,仅凭接下来的“连锁反应”就能解锁全部的点。注意到我们“连锁反应”的一定是按 \(b_i\) 从小到大排序后的一段前缀(因为越往后连锁代价越昂贵),找到转折点后面每个点分别花 \(p\) 的代价解锁即可。

时间复杂度 \(O(n \log n)\)。

B. Effects of Anti Pimples

我们考虑计算每一个点最大值的贡献次数。假设说所有 \(a_i\) 互不相同,那么如果说 \(a_i\) 想要贡献,就一定要选择至少一个 \(i\) 的因子 \(j\) 对应的 \(a_j\),并且还要保证不存在一个位置 \(k\),满足 \(k\) 是 \(j\) 的倍数且 \(a_k \geq a_i\)。实际上我们只需要从大到小枚举所有数,先看一下有多少 \(i\) 的因子 \(j\) 对应的数未被删除,计算完当前数 \(i\) 后删掉所有 \(i\) 的因子 \(j\) 对应位置的数即可。对于 \(a_i=a_j\) 的情况,只需先计算位置更靠后数即可。

时间复杂度 \(O(n \log n)\)。

C. Autosynthesis

我们考虑建立图论模型。对于点对 \((i,a_i)\) 就从 \(i\) 向 \(a_i\) 连一条边,表示 \(i\) 想要留存在集合内的话必须将 \(a_i\) 删去(注意到这样建出的图必然是基环内向树森林)。如果我们设留在集合内为黑色,删去为白色,那么我们可以注意到一个染色方案合法的充要条件是不存在一个黑点指向另一个黑点,且不存在一个白点满足没有黑点指向它。于是我们只需要构造一组合法的方案即可。

注意到对于树的部分答案是唯一的(由于叶子只能为黑点,可以逐层向上确定),对于环则只有两种确定答案的方式。强制枚举环上每个点的颜色暴力检验合法性即可。

时间复杂度 \(O(n)\)。

D. Lexichromatography

首先第二个条件可以转化为不能存在两个点 \(i,j\)(\(a_i=a_j\) 且不存在 \(i<k<j\) 满足 \(a_k=a_i\))染了相同的颜色。对于题目要求我们计数的东西(蓝色字典序小于红色字典序),不难发现答案就是两者所选序列不相同的方案数除以 \(2\) 的结果(考虑每个合法的方案交换颜色后必然唯一对应一组不合法的方案)。所以我们用总方案数减去两者所选序列完全相同的方案书即可。

首先我们只要存在一组相等的方案,一定是可以通过贪心简单构造出来的。具体来讲就是能往对于第一次出现的权值,直接染成蓝色,接下来交替染色。如果这样都不能相等就说明不可能相等了。

在这个基础上考虑如何调整出其他的方案,注意到我们之前钦定每种权值都优先染蓝色。所以如果想要构造出新方案,只要让某些权值有限染红色即可。但我们当然不能随便决策,因为可以发现一些颜色是绑定的。具体来讲如果说一种权值之前出现过奇数次,那么它的决策就会和当前权值的决策绑定。对于这种“绑定”的形式显然可以使用并查集维护。对于维护以哪些点为根的连通块存在出现奇数次权值的问题,使用 set 进行维护即可。

时间复杂度 \(O(n \log n)\)。

标签:902,based,黑点,复杂度,我们,即可,权值,Round
From: https://www.cnblogs.com/Hypercube07/p/17750510.html

相关文章

  • Codeforces Round 902 (Div. 2) (CF1877) B、C、D 题解
    B题目大意你要传话给\(n\)个人,每传一下话需要花费\(p\),当一个人被传话后,他可以最多传给\(a_i\)个人,每次花费\(b_i\)。问把话传给\(n\)个人的最小花费。分析首先传给第一个人只少要\(p\)下来贪心,每次让花费最小、且能够传话的人去传话。考虑建一个堆,堆内的信息是......
  • Codeforces Round 902 Div. 2 - A B C D
    目录A.GoalsofVictoryB.HelmetsinNightLightnull传送门A.GoalsofVictory对给定n-1组队伍的净得分求和取负即为最后一组队伍的净得分B.HelmetsinNightLight赛时想法假了,赛后更正对所有人按照传递花费升序排序,从小到大逐步选取先花费p为传递花费最小的居......
  • Codeforces Round #902 (Div.1)
    A注意到\(a_i\ge1\),因此我们先花\(p\)的代价买下\(b\)最小的,然后一定可以一直用当前可能的最小代价买下后续的人。不难发现这一定是最优的方案。只需要将序列排序或者用std::multiset来维护。单组数据时间复杂度\(O(n\logn)\)。https://codeforces.com/contest/1876/......
  • 「Round C10 B」间隔 题解
    简要题意本题有\(T\)组数据。给定一个由\(n\)个元素构成的正整数数列\(a_1,a_2,a_3...a_{n-1},a_n\)。问至少需要插入多少个整数才能使得\(a\)的各相邻元素之差相等(不能插入在头尾)。\(a\)数列保证是单调不减的。\(1\len\le10^6,0\lea_i\le10^6,1\leT\le1......
  • 2023.10.7 LGJ Round
    A你每秒种可以施展一种秘籍\(\{a_i,b_i\}\),使得后面\(a_i\)秒每秒都造成\(b_i\)伤害。问至少多少秒可以造成\(M\)的伤害。共\(n(n\le3e5)\)种秘籍,\(M\le1e18,a,b\le1e9\).显然可以二分答案,考虑二分\(mid\),那么我们要造成最多的伤害。贪心,每秒都选择在\(mid\)秒......
  • Git基础(Based on ProGit)
    GitGit的配置信息使用gitconfig命令对Git做一些配置。Git的配置文件等级Git的配置文件有三个,分别对应不同的影响等级:Linux下/etc/gitconfig:包含系统上每个用户及他们仓库的通用配置,使用gitconfig--system更改~/.gitconfig或~/.config/git/config:针对当前用户的......
  • CF1857B Maximum Rounding
    题目大意给定一个自然数\(n\),可以对任意一位进行四舍五入,可以进行任意次,求能得到的最大数。\(n\)的长度不超过\(2\times10^5\),没有前导零。solution首先,选择四舍五入的数一定\(\ge5\),不然对答案没有贡献。其次,高位的数可能会受到低位的进位,这启发我们从低位向高位考虑......
  • Codeforces Round 900 (Div. 3) E. Iva & Pav (位运算)
    CodeforcesRound900(Div.3)E.Iva&Pav//思路:10^9转换为2^32上的位,进行位运算,a[x][i]为到x为止第i位的1个数前缀和//对于与运算,如果当前i的前缀和不为r-l+1,则这一位的与运算结果为0//当找到从左往右第一个位置i为1使得k在这位为0,则与运算前缀大于k//二分查找最后一......
  • Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple (位运算)
    CodeforcesRound901(Div.2)C.JellyfishandGreenApple//思路:浮点数转二进制,a/b的结果为gcd(a,b)*最简分式(n/m)的结果//苹果能分的前提是人数得是一个2的次幂数,通过切割只能分为形同0.001的二进制小数//a/b的二进制如果在从左到右的sp位为1,则需要切割到这个情况//一个......
  • 周赛 Round 14 2023.10.3
    内部比赛链接:周赛14A.修改序列modify考虑且最小值和最大值之差最多为\(1\),那么最终序列肯定呈均分状态。又因为最终序列总和不变,则可以算出均分状态下的每一个值。然后每个数\(A_i\)则变成距离它最近的最终序列值就行。B.表示法knuth模拟题,注意需要在除了前缀ten之......