Codeforces Round #582 (Div. 3)
打csp前一天再补一场cf热身hhh
为了提升做题体验就补了一场div3
div3还是快乐hh
空了F没做,不ak来攒rp(其实是不想做(其实是没时间了(其实是不会做......
A,B很水
直接看C
题意:
给出n,m(1<m<n<1e16)要求得出在n之内,m的所有倍数的个位数字之和
开始想错了,以为m的倍数的个位数字都是m的个位数字(显然不是),然后脑补了一下sigma,把m提出来,里面就是一个等差数列,求一个前n项和就好了
写了一发 发现没过样例,仔细一想,哦,原来个位数字是会变化的(废话!
显然个位数字会出现一个循环,具体是多少没兴趣找,直接十个一组就好了
n/m得出n之内有多少个m的倍数,再除个10就得出了有多少组,剩下的想怎么算就怎么算...
再来看D
D又是两个版本,直接看hard版
题意:
给出n个正整数,每次操作可以把其中一个数字除2(下取整),问最少需要多少次操作,这n个正整数中有k个是一样的(1<n,k<200,000)
开始想的是:因为每个数字不超过200,000那么不断除2,最后总能到0,那么这就是一条路径,所有数字都这么做,就构成了一个树,然后做个树形DP就好了
但是仔细一想没法维护何时恰好是k个相同的数字
感觉就有点不会做了
想了一下,觉得肯定要从大往小缩,某个数字如果超过了k个,就取前k个
怎么维护次数呢?
不如搞一个堆乱搞一下
堆里面存的是一个pair,第一个数是当前这个数字的大小,第二个数是经历的操作次数
然后不断pop、push就好了
本着试一试的心态就交了一发,结果1A了
感觉我这个应该不是正确解法...不过乱搞出来了就行hhh
感觉D这么难,E我应该做不出来
看了一下E居然发现可做
题意:
你需要用'a','b','c'构成一个长度为3n的字符串,要求'a','b','c'每个字符都出现n次
再给出两个长度为2的 由'a','b','c'构成的字符串
要去你构成的字符串中,不包含给出的这两种子串
输出任意一种方案即可
实际上一个给出的字符串只是要求了某种字符不能跟在另外一种字符后面
很难不会想到,可以把'a','b','c'三个字符的关系想象成是一个图,开始的时候任意两点之间都是有边的,给出一个字符串实际上就是删一条边
如果给的是'aa','bb','cc'这样的字符串其实没有影响
因为最后只要我们图上存在一个三元环,那么以这个环的任意一种顺序重复n遍,得到的串一定是符合要求的
如果给的是'aa','bb','cc'这样的字符串,那么最后我们的图上一定存在三元环
但是如果没有三元环呢?
说明就没有给‘aa',''bb','cc'这样的字符串了
那么就可以做出形如aaaabbbbcccc这样的字符串了
这个时候只需要看一下哪种方式是可以的就好了
做完E之后发现 做G的人比F多
就去看G了
题意:
给出一个带边权的树,有m组询问,每组询问是是一个正整数m_i
对于每组询问m_i,你需要给出在图中,最大边权不超过m_i的简单路径的数量
(1<n,m<200,000)
看题看到一半的时候,只看到了树、最大边权、询问,就以为是树链剖分
一看数据发现不对
仔细读完题感觉没有思路,就准备去打游戏去了(
但是一想,不对啊,这么多人都做出来了,这个题应该不难才对啊
看到题目最后一句话是说,这m个询问就是从1~m
然后就在想,那为什么不直接从1~m按顺序询问呢?
一想到顺序,就突然会做了
思考一下,如果询问的边权是m_i,那么比m_i小的边权随便往里面加,但是都不会影响答案
那么做法就很明显了
把询问从小到大排序,把比当前询问小的边全部加进去
用并查集维护一下每个点集的连通性和点的数量,就可以很轻松的得出答案了
然后就没有然后了
再去看F题
恩,似乎是是字符串题,而且题意还挺麻烦的
恩,一看就知道是辣鸡题,不做了ahhhhh