您的位置:首页 > 其它

思路与好题记录与小技巧

2016-09-07 18:22 471 查看
记录好题,值得看看或再做一遍:

p1306 SDOI2008,P1377仪仗队

BZOJ1067降雨量

想看的东西:
https://ruanx.pw/post/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3.html https://zhuanlan.zhihu.com/p/20085048 http://www.cnblogs.com/zzqsblog/p/5851393.html http://hzwer.com/8053.html http://www.matrix67.com/blog/archives/276 http://blog.csdn.net/PoPoQQQ/article/details/53166326 http://blog.csdn.net/tgop_knight/article/details/44539555 http://rapiz.cf/2017/link-cut-tree/ http://www.cnblogs.com/mlystdcall/p/6232324.html http://blog.csdn.net/chty2018/article/details/53432272 http://vfleaking.blog.163.com/blog/static/1748076342013112523651955/ http://blog.csdn.net/u011466175/article/details/38712967 http://blog.csdn.net/pi9nc/article/details/9615359
平方和公式
https://zhuanlan.zhihu.com/p/26020672 https://zhuanlan.zhihu.com/p/25984772 http://www.cnblogs.com/zzqsblog/p/6700133.html
看见如果有平方的柿子尝试把平方拆开,这样就会出现一个对应位置相乘的项(-2*ai*bi)和常数项(ai^2+bi^2),这样很可能就卷积了

字符串循环同构匹配只需要一个串循环就行了,因为如果a串循环的话b串可以通过额外循环和a串循环相同步数来使相对位置相同

所以循环同构匹配只需要一个串循环就行了

LL f(LL x,LL y)
{
LL tmp=0;
while(y)
{
if(y&1)
tmp=(tmp+x)%p;
y=y>>1;
x=(x<<1)%p;
}
return tmp;
}


View Code
原理就是将其中一个乘数分解成二进制,比如5 * 17就是5 * (16 + 1),5 * 23 就是 5 * (16 + 4 + 2 + 1),逐步膜就不会炸longlong

求割集bfs,遍历到的和没遍历到的之间的连边就是割边,因为在求最大流的时候反向边流量增加了所以下面这条边不会被算进去



求字典序最小的割集只能枚举边删除然后最大流验证,如果删边后的最大流变小了,这个边就是割集中的一个,删掉的边就不还原了,然后更新最小的最大流,然而我怎么搞都不行,好晕qaq

↑所以说暴力出奇迹,想不出复杂度优美的算法就暴力硬肛

dfs如果没法记忆化,可以尝试改变参数的表达方式,或者换另一种可行的搜索方式,也可以找互补的搜索方式,一个更加具体的例子是状态不表示为搜索的序列,而是序列的两端点,这样就可以忽略下标直接剪枝,在添加两端点的时候直接更新花费

涉及到取模或整除的DP时可以考虑枚举取模后的数做一维状态

syzoj上看到的黑科技:解n皇后问题



我觉得i+j和i-j+n应该是向右斜和向左斜分别映射到最上边和最左边(吧

用壮鸭低劈处理铺砖问题的时候dfs枚举的满足这一行的状态s1需要的上一行的状态s2,最后将满足s1的s2对应的方案加进s1里,所以s2可以存在空格(这也算无后效性吧

依旧是转化问题,来自传纸条,比如求从一个点到另一个点然后再回来的路径,要求去的和回来的路径不能相交,这个时候没必要计算回来的路径,直接记录两条从一个点到另一个点的两条不相交的路径即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: