首页 > 其他分享 >CF1923 Educational Codeforces Round 162 (Rated for Div. 2)

CF1923 Educational Codeforces Round 162 (Rated for Div. 2)

时间:2024-02-26 19:46:59浏览次数:13  
标签:二分 Educational Rated 相同 CF1923 元素 吃掉 区间 粘液

C.Find B

给出一个数组A,对于q个询问,每个询问给出[l,r],对于A的子数组[l,r],问是否存在一个相同大小的数组B,使得两个数组的和相同,且任意相同下标的元素不同?

Solution:
A中任意一个大于1的元素,可以把他变成1,多余的那部分给到其他位置的元素上(如最后一个)
对于等于1的元素,把他变成不同的最小代价是把他变成2.多余的部分再给到其他元素就可以了.
因此用前缀和记录区间内1的个数d[i],最后看 d[i]*2 + 剩余元素个数是否大于等于区间元素的和即可.

赛时这道题没有想透彻,WA了很多发.

D. Slimes

有一排粘液,如果任意相邻的两个粘液是严格不等的,那么大的就可以吃掉小的,并且大小变为两个粘液的和.每秒只有一个粘液被吃,问每个粘液被吃的可能的最短时间是多少?

Solution:

注意这道题既可以向左吃也可以向右吃

若一个粘液 \(i\) 被吃,那一定是通过其相邻的粘液过来的.也就是说,吃的那一方,组成它的序列是连续的,且是 \([j,i-1]\) 或 \([i+1,j]\).

一个序列组成的粘液,花费的时间总是这个区间的长度.

先考虑\([i+1,j]\)(也就是j在i的右边)的情况,另一种[j,i-1]的情况只需要反过来即可.

如果这个区间内元素全是相同的,那么相当于只有最靠近i的那一个元素会对答案有影响,为了方便处理我这里直接对最靠近i的元素先处理一下,如果能吃掉,那么 $ans[i] = 1 $ 即可.假如\(a[i+1],a[i+2]...a[k]\)是相同的,后面我们枚举区间的时候就不要再枚举 $[i+1,i+1] $到 \([i+1,k]\) 这段区间了,因为是无效区间.那么怎么跳过这段区间,这又是我想不到的一个难点.

我们可以记录位置 \(i\) 的下一个与之不同的元素的下标 \(k\) ,从 \(k+1\) 开始二分就好了

如果元素不是全都相同的,那么可达到的粘液大小一定是区间元素的和,一定可以构造出这种吃法

显然当 \([i+1,j]\) 能吃掉i时,\([i+1,j+1]\) 也可以吃掉,并且后者的体积一定严格大于前者,所以可以二分来做.
二分位置 \(j\) ,使得 \([i+1,j]\) 的粘液们可以吃掉 \(i\).

算法:前缀和,二分

标签:二分,Educational,Rated,相同,CF1923,元素,吃掉,区间,粘液
From: https://www.cnblogs.com/oijueshi/p/18034949

相关文章

  • Educational Codeforces Round 162 (Rated for Div. 2)
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1923。为唐氏儿的寒假带来了一个构式的结局,飞舞一个。天使骚骚不太行啊妈的,推了三条线了感觉剧情太白开水了,咖啡馆也是这个熊样子、、、A签到。显然最优的策略是不断地选择最右侧的1进行操作,每......
  • CF1923 VP 记录
    CF1923VP记录AB跳了。C.FindB赛时切了。题意如果存在一个整数数组\(b\)满足以下条件,则认为一个整数数组\(a\)是好的:\(|b|=|a|\)。\(a_i\neqb_i\)。\(\sumb=\suma\)。\(b_i>0\)。给定一个数组\(c\),\(q\)次询问,要求判断\(c[l,r]\)是不是好的数组。可以......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    EducationalCodeforcesRound162(RatedforDiv.2)A-MovingChips解题思路:模拟一下,不难发现是\(1\)之间\(0\)的个数。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusin......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    不会F的场。A答案是最左的\(1\)和最右的\(1\)之间的\(0\)的个数。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); intt; cin>>t; while(t--){ intn; cin>>n......
  • [CF1923C] Find B
    CF1923C首先如果想着先满足第一个条件,使得b数组和a数组的和相同,再想着去凑第二个条件,会发现比较困难。那么不妨反过来,先尝试满足第二个条件。一个很简单的想法是,对于\(\forall1\lei\lem\),如果\(a_i=1\),那么令\(b_i=2\),否则\(b_i=1\)。这样,再考虑去满足第一个条件。此......
  • Educational Codeforces Round 162 [Rated for Div. 2]
    第二次,三道题,剩下的回学校再补,总结:还是需要多练习A:让数列里所有的1都挨在一起,可以看出,相邻1之间有多少个0就需要操作几次,特判:当只有一个1或者原本全是1就输出0;voidsolve(){cin>>n;inttop1=0,top2=0,cnt=0;memset(a,0,sizeof(a));memset(b,0,siz......
  • CF1923(重要)
    只做了A,成功被sb错误卡住。A每次挑最右边的左移。B每次一定是优先向最近的怪物打,打完一个打下一个最近的。子弹不一定只能打两个怪物,所以打的时候用循环判断子弹是否打完。Cl=r不行否则考虑全1再把所有\(c_i=1\)的都+1,这需要\(cnt1[r]-cnt1[l-1]+(r-l+1......
  • SQL Server Accelerated Database Recovery调研
    背景  作为RDS for SQL Server团队,我们给用户提供核心的商业数据库服务,而数据库服务的SLA至关重要,而RTO又是数据库SLA的重要部分,但最近对于一些使用大规格实例的GC6以上客户,出现过一些由于重启/HA导致花费较长时间在数据库恢复过程,从而导致长时间服务不可用,严重影响了我们......
  • Atcoder Educational DP Contest 题解
    比赛链接:Atcoderr或者题单A:Frog1常规线性dp,注意到对于每个落点来说,青蛙只能由第\(i-1\)个石头或者第\(i-2\)个石头转移得到,那么我们让\(dp[i]\)为当跳到第\(i\)个石头上的最小费用。此时显然有:\[dp_i=\min(dp_{i-1}+\left|h_i-h_{i-1}\right|,dp_{i-2}+\left|h_......
  • Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)
    目录题目链接题意题解代码题目链接C.DigitalLogarithm题意给两个长度位\(n\)的数组\(a\)、\(b\),一个操作\(f\)定义操作\(f\)为,\(a[i]=f(a[i])=a[i]\)的位数求最少多少次操作可以使\(a、b\)两个数组变得完全相同题解性质:对于任何数,经过两次操作我们一定可以让其变为\(......