欢迎光临散文网 会员登陆 & 注册

Codeforces Round #751 (Div. 2)

2021-10-26 00:09 作者:Asunataisiki  | 我要投稿

A. Two Subsequences

题意:给一个字符串,将其分为a,b两个字符串,其中a的字典序最小

思路:a直接输出最小的字符,b输出剩下的字符就可以了

(感觉代码太罗嗦了)


B. Divine Array

题意:有一个数组a,现在对其进行变换,将第i个位置上的数字a[i]变成a[i]的出现次数

e.g 数组a:2 1 1 4 3 1 2 

第一次变换后为 a: 2 3 3 1 1 3 2 

给出q个询问,每个询问给出x,k,代表第k次变换后,a[x]的值为多少?

思路:模拟第一个样例以及简单的思考后(不会证明)就可以知道,在经过一定的变换次数后,整个数组变保持不变,所以我们可以在询问前预处理出所有的情况,这样每次询问都是O(1)的复杂度了。


C.Array Elimination

题意:每次选k个数,令x = a[1] & a[2] &....&a[k], 并且a[1] - x, a[2] - x .... a[k] - x, 问是否能将数组a的所有元素变为0,从小到大输出所有k的可能值


思路:(位运算的题,一般都是转换为2进制考虑每一位的贡献or01字典树)

这里考虑每一位的贡献,最终目标是要所有的位置都变成0。

对于每一次减法,相当于可以把1变成0,假设某一位上一共有x个1,那么为了将x个1全部变为0,那么x一定是k的倍数(每次选x/k个出来进行运算嘛,不然这一位最后一定是一个1和0),那么每一位都这样,就是对所有位上的1的个数求一个gcd


由于本蒟蒻还不会线段树,所以D题先只写bfs写法,EF等过两天学了线段树再来补

D Frog Traveler

题意:在深度为n的井中有一个青蛙,有两个数组a[i]和b[i],a[i]表示在深i米的地方青蛙能往前跳[0, a[i]]米,b[i]表示青蛙在深度为i的地方会往下滑b[i]米。

问最少需要几次能跳出井,并输出路径(下滑前)

思路1:bfs爆搜每种跳跃情况,但是要加一个优化,我们对于每一次跳跃,从当前跳跃的最大高度(a[i])向后遍历,同时我们维护一个跳跃的最大高度,如果当前跳跃都不能调到这个高度,那么比a[i]小的跳跃高度就不用再看了,不加优化会T在第10个点。

输出路径:用一个数组pre来记录下滑后的点是从哪里过来的,ans数组记录下滑后的这个点是从哪里滑下来的,最后用stack遍历一下就可以了。


Codeforces Round #751 (Div. 2)的评论 (共 条)

分享到微博请遵守国家法律