题目+思路(一句话开脑洞)
一个球指定2个碗,具体指定哪两个由输入决定,在所有这些指定方式中,有多少解能满足? 每个碗最多放一个球,球可指定两个相同的碗 |
1.球碗用连线相接,变成图的问题? 2.最多多少?网络流? 3.答案:一个球必指向两个碗,那么把一个球当作图中的边而碗作为点,球给了哪个碗,就决定了边 的方向指向哪个点,有多少种无向图变有向图的方法
|
--------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
https://codeforces.com/contest/1175/problem/D 分段后,各区间sum乘以区间序号,最大化答案 |
脑洞,1.转换维度。2.前缀和。 |
https://codeforces.com/contest/1175/problem/E 各点都有跳转长度,m次查询跳转次数,避免O(n*m) |
脑洞,线段树思想,快速幂思想,多次查询用2次幂的已存数据去恢复。 |
前缀和,很重要!!! https://leetcode.com/problems/gas-station/ 即使在循环情况下,前缀和仍然能在区分左右的时候保持性质 |
|
https://codeforces.com/contest/1175/problem/F 一个arr中的区间长度为L,如果这个区间的数字正好是1~L(可以乱序),那么这个区间定义为good 求最长good区间,时间复杂度是丧心病狂的O(n) 暴力的话,枚举区间用n^2,check用n,所以一共n^3 |
前缀和思想,构想答案外貌 A.如何快速知道一个区间是否good?三个条件约束:1.区间无小于1的数字,2.区间内无重复。3.区间和 sum=L(L+1)//2。 想想上面三个条件是不是完全约束了?是的。满足1,2两条后,1~L才能确定唯一的最小的sum, 其他情况都大于L(L+1)//2 那么1.2合体维护一个最远上次合法位置,3用前缀和。 这样的话我们可以用O(1)来check了。 B.然后构想答案外貌来把枚举区间降为O(n) 从1开始,往右扫,当前位置作为good区间右边界,那么左边界在哪里?这里要构画一个辅助假设,就是 区间的最大值(同时也是区间长度L)在1到右边界之间(而非在1左边),那么直接用当前max作为L即可。 至于左边的情况,直接reverse再做一遍即可。 至此,这道让我心心念念了一个多月的题目就此搞定。做完之后发现并不难。不知道它是不是真不难。
|
给一个字符串组成的list,求一个排序,使这些str排列成的整体字符串的字典序最大 |
用局部性质反应整体性质。 假设list中只有两个str,怎么样排列前后? 假如两个str分别为a,b,两者都不是对方的前缀的话,直接把字典序大的str排前面就好,对吧。 那么如果两者时a是b的前缀的关系怎么搞?如果有三个怎么搞? 答案:a+b > b+a的话a就在b前面,而且此关系可以传递,于是就能用此关系来排序了~ |
https://codeforc.es/contest/1166/problem/F 两个同色边挨着才能通过。 把符合这种情况的边连接的点做并查集,但是内部异构呀!!! 是否能连接集a中的一个点需要重新check一下。。。 |
中间的过渡节点是不需要的!!!他们只会扰乱信息!!!只建立能2边同色直连的点的连接关系。这样是n^2 的空间?NO,大意了!别忘不会超过边数!然后单边相连的额外处理不就行了。 真的是什么都抵不住静心思考,因为现在掌握的工具已经比较多了,不会的有:主席树,fft,hash类,其他都 应该能做才对。 |