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

Codeforces Round 891 (Div. 3)

时间:2023-08-16 16:58:06浏览次数:47  
标签:891 题意 idx sum Codeforces Find 数组 Div 思路

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

A. Array Coloring

题意:一个数列,问能否分成两个和的奇偶性相同的集合
思路:因为偶数不改变奇偶性,咱们就统计奇数的个数,能平分成两组就行

B. Maximum Rounding

题意:给一个数,每次可以找一位数不四舍可五入,然后把这个位及后面的数都变成零,找到最终能到达的最大的数
思路:显然从最低位开始操作才能到达最大的数,所以就这么做

C. Assembly via Minimums

题意:给一个转化后的数组b,求一种可能的原数组a,其中b是由\(min(a_i, a_j) (i < j)\)组成的
思路:其实min(ai, aj)就是a数组中的数两两进行比较,因此,最小的数会在b中出现n-1次,第二小的出现n-2次,以此类推,并且推下去发现最大的数是不会在b中出现的,就随便找个数糊弄就行

D. Strong Vertices

题意:给两个数组,如果\(a_u - a_v >= b_u - b_v\),就有一条u到v的有向边,问有多少个出度为n-1的点
思路:O(n^2)的暴力是过不了,即使算上只要有一次不成立就break,就算是想如果条件不满足,说明反向成立也就是有个1/2的常数,要换思路。我们稍微改变一下条件原式其实就是\(a_u - b_u >= a_v - b_v\),预处理一下得到数组c, 其中\(c_i = a_i - b_i\),那么,我们要找到出度为n-1的点,也就是有一个数比其余n-1个数都大于等于,其实也就是找最大数有几个

E. Power of Points

题意:给一个数组x,对每个\(s=x_i\),和原数组组成n个区间\([s, x_0], [s, x_1]...\),对\(1-10^9\)中每个数,\(f(i)\) = 覆盖\(i\)的区间数,求\(\sum_{i = 1}^{10^9} f(i)\)
思路:其实就是求n个区间的大小,逐个去搞要\(O(n ^ 2)\),不好,我们先排个序,然后梳理一下公式,对每个\(s=x_idx\),
\(\sum_{i = 1}^{10^9} f(i) = \sum_{i = 1}^{n} |max(s, x_i) - (min(s, x_i) - 1)|\)

\(=\sum_{i = 1}^{idx} {s-x_i+1} + \sum_{i = idx+1}^{n} {x_i-s+1}\)

\(=n + s*(idx-(n-idx)) - \sum_{i = 1}^{idx} x_i + \sum_{i = idx+1}^{n} x_i\)

\(=n + s*(2 * idx - n) - \sum_{i = 1}^{idx} x_i + \sum_{i = idx+1}^{n} x_i\)
这样就很明显了,后两个求和用前缀和求取即可

F. Sum and Product

题意:给个数组,对于每次询问x, y,找到有多少种满足\(a_i + a_j = x, a_i * a_j = y\ (i < j)\)的组合
思路:其实两个式子稍微联立一下就能得到\(a_i\)和\(a_j\)的值,分别是\(x_1 = \frac{x + \sqrt{x^2 - 4y}}{2}\)和\(x_2 = \frac{x - \sqrt{x^2 - 4y}}{2}\),但是直接最好让\(x_2 = x - x_1\)减小误差,不然真的烦人内,然后分不存在、\(x_1=x_2\)、\(x_1!=x_2\)三种情况用乘法原理算组合。或者,其实看这两个解多半就知道是一元二次方程了,让\(\Delta = x^2 - 4y\),分无解、同解、两解分情况套路也可以。

G. Counting Graphs

题意:给一个最小生成树,可以往上面加权值不超过s的边,但是不破坏原最小生成树,问有多少种情况
思路:下面是我拙劣的理解:我们从生成最小生成树的思路出发,prim显然是指望不上,看看kruskal,它的想法是从小到大枚举边,用并查集维护最小生成树,那么这说明我们在加边的时候,是不能加比点相连原边权值小的边,只能加\([w_i, s]\)的边;
而且,不能连已有边权比加的边权大的点,并且这个点不能连回来会重复,所以我们只能连权值比\(w_i\)小的边,于是我们不如就在建最小生成树的过程中来计算;
在连两个点之前,这两个点一定是不连通的,分属于两个连通块,这两个连通块之间,可以随意连接边权在\([w_i, s]\)的边,除去已有的uv间的边,有size[Find(u)]*size[Find(v)]-1中可能,于是对于每条边,就有\((s - w_i + 1) ^ {size[Find(u)]*size[Find(v)]-1}\)的贡献。

标签:891,题意,idx,sum,Codeforces,Find,数组,Div,思路
From: https://www.cnblogs.com/V-sama/p/17634927.html

相关文章

  • IE中div被视频遮住的解决方法
    使用embed来内嵌视频,因为视频是windowsmediaplayer,上面想用div浮动一些内容,之前尝试了一些方法,比如1.通过设定不同组件的z-index值2.通过设定wmode值结果都没有效果。最后设定了windowlessVideo=1,终于解决问题。 具体说明一下:“windowlessVideo”属性如为true,则设置成无窗......
  • Educational Codeforces Round 107 (Rated for Div. 2)
    EducationalCodeforcesRound107(RatedforDiv.2)A-ReviewSite思路:数1和3的个数#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair&l......
  • Codeforces Round 765 (Div. 2) A-E
    A.AncientCivilization好像就是对每个二进制位看一下0多还是1多,选择多的那个数就好了。vp的时候直接猜的,交了一发直接过了voidsolve(){intn=read(),m=read();vector<int>cnt0(m+1),cnt1(m+1);for(inti=1;i<=n;i++){intx=read();for(int......
  • Codeforces Round 893(div2)
    CodeforcesRound893(div2)[A题传送门](Problem-A-Codeforces)A题意:我们有a+b+c个瓶盖,选手1可以拿指定的a个或者c个里面的一个,选手2可以拿指定的b个或者c个里面的一个,可以拿完最后一个的即为获胜者,每个人都有最优策略。A思路:这个题一开始想错了,主要是没有读懂题意,理解清楚......
  • AGC064C Erase and Divide Game
    题面传送门首先考虑你只插入若干个数怎么做:按位从低到高插入一棵Trie,问题就变成:在Trie上每次可以往左儿子走或者往右儿子走,如果当某个人操作的时候为空节点那么这个人就输了。如果我们可以将这棵树建出来那么这个问题就是好解决的,可惜建不出来。仿照从高到低建Trie的方法,将......
  • ABC314 E和CF892 Div2D-E
    ABC314EE-Roulettes(atcoder.jp)大致意思是给你n个轮盘,第i个轮盘等概率的p[i]个点数,玩一次c[i]价钱,问要达到m点的最小期望花费是多少,每次可以任意选一个。乍一看很像背包,偏了方向,所以当时没有做出来。也考虑过其它的DP,关键是0怎么处理没搞明白所以赛后看他人的代码和题解......
  • Codeforces Round 892 (Div. 2)
    CodeforcesRound892(Div.2)A.UnitedWeStand简述题意给定一个长度为$n$的数列$a$,要求将$a$的每个元素分配到数列$b$,$c$中,满足以下两个要求$b,c$不为空,即$l_b\geq1,l_c\geq1$。对于任意$i$和$j$$(1\leqi\leql_b,1\leq......
  • Codeforces Global Round 15
    CodeforcesGlobalRound15A-SubsequencePermutation思路:找出原串与排序后的串不同的个数#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;cin>>n;strings;cin>>s;stringt=s;sort(t.begin(),t.end());intans=0;......
  • Codeforces Round 892 (Div. 2) A-E
    A.UnitedWeStand题意:给出一个长为\(n\)的数组\(a\),将其中的元素分别放到空数组\(b\)和\(c\)中,使得\(c\)中的任意一个元素都不是\(b\)中任意一个元素的因数,并且两个数组都不是空数组Solution把\(a\)中最小的数放到\(b\),其它的都放到\(c\),一定可以保证要求成立voidsolve(){......
  • Codeforces Ronud 892(Div.2)
    CodeforcesRonud892(Div.2)关于A题我有话说传送门题意给定一个长度为n的数组a,问能否将元素全部放入两个空数组b和c中,使得b和c数组同时满足非空,且c数组中没有任何数是b数组中的数的除数,如果可以输出一种存储方案,不可以就输出-1思路当天晚上一开始没有做出来,我一开始的思路是......