题目+思路(一句话开脑洞)

一个球指定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类,其他都

应该能做才对。

   
   
   
   
   
   
   
   
   
   
   
   
posted @ 2019-05-13 11:46  Cloud.9  阅读(249)  评论(0编辑  收藏  举报