codefroces problemset
D. Not Adding https://codeforces.com/problemset/problem/1627/D
description
找出集合n中任意子集的gcd集合,求集合的个数(ai<=1e6)
solution
观察到 ai 的数据范围,可以知道子集的元素都是1e6的范围内,那么我们枚举 x(1-1e6) 。
对于x,找出所有他的倍数,如果这些倍数的gcd==x。
View Code
D1. Game on Sum (Easy Version) https://codeforces.com/problemset/problem/1628/D1
description
博弈+概率。Alice选择一个数,Bob选择正负(但选择正的次数不能超过m次)
solution
参考博客:https://blog.csdn.net/qq_51690312/article/details/122710359
取平均值
(没给概率p时,就先求概率或一个数的期望,不好求时,直接dp。n=2000,范围不大的,能直接去想dp,就看n的范围,先看范围!)
(有逆元:说明分母是离我们比较近的,例如:2^n , 2)
View Code
https://codeforces.com/problemset/problem/1632/D
D. New Year Concert
description
求出最小修改的次数,使得不存在gcd(a[l]..a[r])!=(r-l+1)
solution
我们可以发现,对于同一端点,随着长度的在增加,gcd减少,那么我们可以使用双指针维护
对于每次修改,改成无穷大质数,那么相当于一个墙
需要用到 st 表维护区间gcd
View Code
https://codeforces.com/problemset/problem/1635/D
D. Infinite Set
description

求集合最终的不超过pow(2,p)的个数
solution
可以发现,一个是左移一位加一,另一个数左移两位。用进制位进行dp
不过要消除重复的,比如1000与10,比赛的时候就卡在这里!!那么我们可以从小到大枚举,如果大的数可以被小的数通过变换得到, 那么就相当消除这个元素
View Code
https://codeforces.com/problemset/problem/1637/E
E. Best Pair
description
找出最大的(x+y)*(cntx+cnty), cnti即i在数组中年出现的次数
solution
我们可以发现,用cnt相同作为分组,这样组数不超过 sqrt(n) 。然后我们只需要枚举 cnt ,贪心的选择cnt里面尽可能大的即可
组内排序,二分查找是否在bad。尽早break。
View Code
https://codeforces.com/problemset/problem/1638/D
D. Big Brush
description
涂色,每次只可以涂2*2矩阵,求最终完成给出的图案的策略。
solution
bfs,将后覆盖的加入队列里,那么在后覆盖的地方,可以铺任意颜色。
View Code
链接:https://codeforces.com/contest/1624/problem/E
E. Masha-forgetful
description
给出n个串,长度为m。找出n个串中所有的子串拼凑成 s 的方案
solution
dp,每个s分成以两个或三个为单位,dp即可
View Code
https://codeforces.com/contest/1622/problem/D
description
可以选择其中恰好有k个1的子串,进行任意排序,最多执行一次操作,求最后能形成多少个不同的串
solution
双指针,枚举每个左端点,找尽可能后的右端点,计算排列组合,去重上一个(l+1,r)的答案
View Code
https://codeforces.com/problemset/problem/1644/D
D. Cross Coloring
一道相对简单的D题,不过我T了,是因为题目没有保证多有的n加起来不超过1e5
然后我就用vector动态开数组了,动态开数组初始化时超时了O(N)!!!!!
C. Paint the Middle
description
给一个数组,可以进行操作:选择(x<y<z<=n),且ax=az=0,那么可以将ay=1,求最后的和最大
solution
尽可能早最长的区间,并且找交替的延长,贪心
View Code题解:线性dp
https://blog.csdn.net/m0_51422323/article/details/122895344
https://codeforces.com/problemset/problem/1627/E
description
逃出去,有梯子可以从低楼层到高楼层,楼层之间走动的代价的dis*xi
solution
对于同一楼层,发现具有单调性,左右遍历一次,dp记录最小值即可。
注意什么放在while里面。。
View Code
https://codeforces.com/contest/1622/problem/E
E. Math Test
description
n个学生的期望成绩,和n个学生对m道题目的对错,求出一个排列p,表示每道题的得分。
求期望与实际得分的绝对值最大是多少 (n<=10,m<=1e4)
solution
(1<<n) = 1024,每个学生对答案的贡献要么是 (x-r),要么是(r-x)。那么我们枚举每个学生是这两种贡献情况,然后找出最大值。
对于每种情况的组合,+ 前者尽可能大,- 后者尽可能小,那么我们对(sum[+]-sum[-])排序
View Code
链接:F-交换_牛客小白月赛45 (nowcoder.com)
F.交换
description
选择指令操作集中的一段子串从前往后按顺序执行指令来完成任务。对于每个任务,输出最短可完成任务指令数长度。
solution
字典树上记录dp
View Code
链接:Problem - 1646D - Codeforces
D. Weight the Tree
description
给定一个节点为n的树。当一个结点的权值等于周围结点的权值时,这个结点是good。权值由我们自己决定,求最多的good结点,若有多组答案,输出权值和最小的那个。
solution
当n==2时,两个结点都为good结点,权值都为1
当n>2时,一条边的两个结点不可能同时为good结点,于是就可以dp。我们可以让good结点等于他的度,不是good的结点权值为1,这样就能保证权值和最小。
定义数组PII f[i][2] 其中f[i][1]代表当根结点为i时且该结点为good结点,在子树中能形成的最多good结点及其最小权值。 同理f[i][1] 代表i不是good结点…
有上面的分析可知f[u][1] 只能从f[j][0]转移而来,f[u][0]可以从f[j][1]和f[j][0]中的较大者转移而来。
View Code
链接:Problem - 1641C - Codeforces
C. Anonymity Is Important
description
Sam 医生有 n nn 个病人排成一排等候,接下来有 q个事件依次发生,属于以下两种类型:
l r x ,检查报告指出从左到右第 l 个到第 r 个人无人生病(x=0)或至少有一人生病(x=1)。
j ,Sam 想知道从左到右第 j jj 个人一定生病、一定无病,还是有可能得病。
对于每次 Sam 的询问,你需要输出答案(一定生病 YES,一定无病 NO,有可能得病 N/A)。
solution
可以看出 x = 1 的限制区间的性质,如果一个区间完全包含另一个区间,那么大的区间就没有用。
于是,把所有区间按左端点从小到大排序,那么右端点也是单增的。我们可以用 set 简单维护这个序列,每次加入一个区间就把它前面覆盖它的区间删除,或者如果覆盖了后面的区间就把它删除。
把不可能得病的人排除,也可以用一个 set 维护,每次把区间中最靠左的一个没被排除的人暴力删去就是了。
查询的时候,我们可以轻易得到 j 前面最近的未排除病人 i 和后面最近的未排除病人 k ,查找从左到右第一个左端点大于 i 的区间 [ l , r ] (同时也是满足条件的 r 最小区间),如果 r < k 说明此区间唯一覆盖 j 。
View Code
链接:Problem - 1641C - Codeforces
E. Expand the Path
description
D:下,R:右,可以用DD去代替D,同理R,求不超过边界的合法的可以走到的格子个数
solution
当还未遇到R之前,不适合进行偏移,那么就会有部分空白面积,当遇到R之后,可以计算第一个R之后右移动了多少记为cx,下移动了多少记为cy,留白面积就是cx*cy
View Code
View Code

浙公网安备 33010602011771号