20171017/20171018

10.17

T1是个数论题,弄出来了一堆结论(题解说这很显然,然而我并不明白),然后就可以直接筛了

T2,在考试的时候我想到了正着推去找到每一个元素的时候的有1的个数,我是直接弄了一个结构体来存每一个点1的个数的上下界,但是没有关注到XOR得到的1的个数范围不是连续的,而是跳着的,而且我没有成功的逆转退回去,就是没有找到一个方案能有条理的逆推; 正解是f[i][j]表示执行到第i位的时候,有j个1的可行性,然后再记录一下f[i][j]是从哪里转移过来的,然后再逆推的时候就可以向求出一共有多少个位置都两者都需要 1 然后再依次放就行了

T3是个树归,自己主要是没有太想明白等于的时候怎么转移,我觉得是有一个关键的节点我没有注意到,就是如果等于的话,他只能有一条路径是满足的,也就是说,再寻找等于的时候,要么就是存在唯一一个点等于,然后可以继续dfs下去,要么就是不等于,小就可以直接统计方案数,大就是直接return,再统计的时候,式子可以消掉一部分使方案数与本身那个点无关,然后可以用树状数组来差分一下每一个son的排名直接计算就好了

10.18

T1,KMP裸题

T2,其实就是求割点,满足使1,n不在一个联通块里(我居然没有考虑这个东西),那么我们考虑从1开始tarjan,那么只要保证n再割点一下就行了,那么我们就可以用时间戳来记录n是什么时候访问到的,只要小于回来是的stp并且>=dfn[v]就说明他在底下的块里;

T3,其实就是一个模拟的过程(想着想着就忘了他是一个环),我们把这个环变成加长一倍的链,然后卡一个长度为n的序列,是其中的B都到两边,这里面一定存在最优方案,那么把一个点移动到左边的步数就是他左边R的个数,所以要把B移到两边,找到有一半R的个数分界点,左边的去左边,右边的去右边,再移动两个卡区间的指针的时候,可虑贡献的变动就行了

转载于:https://www.cnblogs.com/FOXYY/p/7690286.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值