首页 > 其他分享 >Codeforces Round 888 (Div. 3)

Codeforces Round 888 (Div. 3)

时间:2023-08-01 12:44:46浏览次数:41  
标签:题意 888 Codeforces 枚举 即可 序列 Div ha 能量

比赛链接:https://codeforces.com/contest/1851

A. Escalator Conversations

题意:一个扶梯,共m阶,n人站,每个台阶高k,Vlad身高H,Vlad任意站,问有多少人站在这个扶梯上正好和Vlad齐平

满足abs(H - h[i]) % k == 0 && abs(H - h[i]) / k <= m - 1 && H != h[i]即可

B. Parity Sort

题意:给出一个序列,可以任意交换奇偶相同的数的位置,问能不能交换成有序序列

排序后的序列和原序列各位上的数的奇偶性相同则说明能成

C. Tiles Comeback

题意:给一条有n个块的路,检查是否从首开始到末尾结束有一条长为k的倍数且每k长度的段颜色相同的路线

特判首尾颜色相同的,只要有k个以上的同颜色的块即可;否则从首尾分别开始枚举即可,如果找到两个k长度且l < r的段,说明能成

D. Prefix Permutation Sums

题意:给你一个去掉一个数的前缀和数组,看看原数组是否有可能是1~n不重复的序列

特判缺的数可能是最后一个的情况,看看最后一个前缀和是否等于n * (n + 1) / 2,是的话可能缺最后一个,挨个求差分判断即可;
否则挨个求差分后,如果是1~n的序列,会有两种情况:有一个数重复出现或比n大(因为少一个前缀和,差分后成了两个数的和),如果只有一个数是这种情况,我们再判断是否能拆成两个还没有出现的数,这是成立的情况。
不成立的情况有两种:差分后大于n * 2 或小于等于0,排除即可。

E. Nastya and Potions

题意:有些药,Nastya想全得到,知道所有药的购买价格,知道一些药有无限储备,知道一些药能由一些药制成,求全得到的最小价格

有些药是只能买的,有些药能被制作出来,而制作出来需要一些药,很显然,是拓扑排序,让有无限储备的药价格等于0,过一遍拓扑更新价格再全加起来就行了

F. Lisa and the Martians

题意:给出一些数a[n]和一个k,对每个(ai ^ x) & (aj ^ x)
(其中i != j且x < 2 ^ k),求其最大值

我们分析这个式子,要求异或同一个数后的按位与,我们固定x不变,如果ai和aj某一位都是0,x这一位取1后这一位结果是1,取0这一位结果是0;如果都是1,x这一位取0后结果是1, 取1后结果是0;如果不同,x取0或1结果都是0。这说明越不相似,结果越小。
那么,我们怎么得到最相似的两个数呢?这里有一个结论,一个序列中二进制最相似的两个数也就是排序后相邻数异或最小的数
那么我们得到了最相似的两个数后,再去推x,也是按照上面的分析,对于x的每一位尽量让结果等于1即可,这个题不止一种解,输出一种即可。

G. Vlad and the Mountains

题意:n座山,其中有些山之间有路,从一座山到另一座山需要消耗高度差的能量,消耗能量可以为负数,对于每一次询问,求从u到v以初始能量e能否到达

如果从a到b,消耗ha - hb,从a经过b到c,消耗(ha - hb) + (hb - hc) = ha - hc,也就是说从一座山到另一座山消耗能量不论是否相邻总是高度差,我们把max(h1, h2)作为边权。
如果我们想要从一条路通过,那么我们必须两座山都能达到,也即是我们到这座山消耗的能量h - ha小于等于能量e,也就是对于每座山,只要高度小于等于ha + e即可。
那么,如果要从a到b,那么在这条从a到b的路径上只要我们的能量能翻过最高的山,其他山也能翻过。
我们有了一个简单的思路,dfs出每条路径,如果e + ha >= h_max,说明能成。

但是,这样做显然会超时,我们换个思路。
基本推论不变,我们按需要能量从小到大去解决每个询问,我们对每个边权小于等于hv + e的边进行枚举且只枚举一次(在之后的询问中不再枚举),我们使用并查集来判断连通性,如果最终没有联通,说明至少有一部分路径边权是比hv + e大的,就走不通。
这和kruskal算法的思路有相似性,都是从小到大依次枚举边,使用并查集检查连通性

标签:题意,888,Codeforces,枚举,即可,序列,Div,ha,能量
From: https://www.cnblogs.com/V-sama/p/17595340.html

相关文章

  • Longest Divisors Interval
    Smiling&Weeping----总有一个人,一直住在心底,却消失在生活里。Givenapositiveintegern,findthemaximumsizeofaninterval[l,......
  • Codeforces Round 888 (Div. 3) 补题
    独立补了一道记忆化搜索的题,https://codeforces.com/contest/1851/problem/E由于初次接触对于使用场景和注意事项都不是很熟悉,写加调估计得有3h。本题的题面保证了本题是个无环图,允许dfs函数会有出口,存图不能用链式前向图,因为非常容易构造数据使得为稠密图,所以用二维数组或vec......
  • Codeforces Round 887 (Div. 2)
    CodeforcesRound887(Div.2)A.Desorting题目大意给出一个长度为\(n\)的数组\(a\),可以执行这个操作任意次。选择一下标\(i\),使得\(a_{1...i}\)加上\(1\),\(a_{i+1...n}\)减少\(1\)。问最少几次操作使得数组\(a\)无序。思路首先如果\(a\)原本就无序的......
  • Codeforces Round 888 (Div. 3)
    传送门AEscalatorConversations读懂题意即可/*Author:north_hFile:A.cppTime:2023/7/26/12:32____________||_||__||__|'_\/_\|'__|__|'_\|'_\|......
  • CF1855B Longest Divisors Interval 题解
    原题链接:https://codeforces.com/contest/1855/problem/B题意:给定一个正整数n,找到满足该条件的区间[l,r]的长度的最大值:对于任意l<=i<=r,n均为i的倍数(多组数据)。思路:如果n是奇数,答案显然是1,因为任意两个连续的正整数一定会有一个2的倍数。将这一结论进行推广:......
  • Codeforces Round 889 (Div. 2) C1 - C2
    Problem-C1-CodeforcesProblem-C2-Codeforces题意:​ 有\(n\)个数字,可以选择任意两个位置\(i,j\)进行操作,使得\(a_i=a_i+a_j\)(也即是把\(a_j\)加到\(a_i\)上),输出任意操作方案使得数组最后是不降的。esay-version要求在50次操作内完成,hard-version要求在31次操作内完成。......
  • Codeforces #889 div2 B
    B.LongestDivisorsInterval做法:假设我们找到了一个最大区间[l,r],这个区间的长度为k,那么这个区间里有一个数必定是k的倍数(自己举个例子就能知道了),因此n也是k的倍数。那么我们再缩小一下区间长度,变为k-1,这个区间可以是[l,r-1],也可以是[l+1,r],这其中必定有一个数是k-......
  • Codeforces Round 889 (Div. 2) 题解
    \(6\)题只做出来\(1\)题,损失惨重A.DaltontheTeacher显然,答案一定和最初的不满意人数有关,所以输入的时候统计一下然后,将不满意的人的座位每两个人交换一次即可,交换次数就是答案如果不满意人数是奇数,那么答案还要加\(1\)时间复杂度\(O(n)\)(输入的复杂度)B.LongestD......
  • CF1855B Longest Divisors Interval 题解
    题意:给定一个数\(n\),求一个连续区间\([l,r]\)使得\(n\)是区间内每个数的倍数,最大化这个区间的长度(多组数据)。思路:逆向思考一波,(如果一个数\(x\)不是\(n\)的因数,那么\(x\)的倍数不能在区间内。举个例子,比如$n$是13,3不是13的因数,\(3,6,9,12\)也就不可能出现......
  • Codeforces Round 889 (Div. 1) 题解
    A1.Dual(EasyVersion)https://codeforces.com/contest/1854/problem/A1题意给定一个长度为\(n\)的序列\(a_1,a_2,\dots,a_n\),你可以做以下操作:选定两个下标\(i,j(1\leqi,j\leqn)\),\(i,j\)可以相同,然后\(a_i\leftarrowa_{i}+a_j\)。要求构造一种操作......