CF603 (Div. 2)题解

传送门:https://codeforces.com/contest/1263

A题 (经典的贪心)
题意:
给你三个糖,每天只能选其中两堆,各拿一个糖。问你最多能拿多少天.
思路:
选最大的两堆,然后将剩下一堆贪心的放入这两堆里。数据过大,可以直接公式算一下.

B题
题意:
给你n个(n<=10)个四位数(可含前导0),问你最少做多少次操作使得这些值互异(对每个数最多只能改一个值)
思路:
做题的时候把这题想的太复杂了..没观察到n的大小。20分钟切掉的题用了50分钟,服了自己.
将这些数存入map,遇到有重复的,只要枚举个位数就好.(最坏情况10个相等也不会有问题)

C题:
题意:
给你一个数n,问你[n/k]有多少种可能的结果,将其从小到大输出.n<=1e9.
思路:
整数分块模板题.O(sqrt(n))

D题:
给你n个只含小写字母的字符串,两个字符串含有相同的字母或者有第三者分别跟这两个字符串相同的话 这两个字符串等效。
问你最少有多少个不等效的字符串
思路:
水题,26个字母,编码成二进制数,拿hashmap装着,每次得到新的字符串,将hashmap里的值与其两两合并,最后取hashmap的size就好.(hashmap里顶多26个元素,所以复杂度是够的。)

另一种解法:并查集
所有字符串中出现a~z划分成26个集合
那么abc的作用就是将集合a b c 合并起来.

E题:(补题) 有意思的线段树
题意:略
思路:
从看题到写题花了一个多小时,写完才发现一个很重要的问题,树状数组不能维护带修改的前缀最大值,SB了。。。
这题要拿线段树维护三个值,最大值,区间和,最小值...
'(' +1 ')' -1
学习到一个线段树的新操作:
如何在线段树上维护前缀和.
对单点修改,变成对这个点到最后一个位置(区间)都+c,这样就将每个叶子节点的含义转化成前缀和。
然后再维护最大值最小值。
如果全局前缀和 !=0 或者 前缀最小值 < 0 那么 当前局面不合法.
例如:(( 或者 ))((
合法的话,全局最大值即为当前状态的答案.

F题:网络流,我做不出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值