摘要:
思路: 设$sum[i]表示i的子树中a[i]的和$ $b[1]=\Sigma a[i]*dis[i] = \Sigma _{i=2} ^n sum[i]$ $b[x]-b[fa[x]]=sum[1]-2*sum[x]$ $sum[1]={\Sigma_{i=2}^n (b[x]-b[fa[x]]) 阅读全文
摘要:
//By SiriusRen #include #include using namespace std; const int N=555; struct Node{int a,p;}node[N]; bool operator<(Node a,Node b){return a.p<b.p;} char pr[]={2,3,5,7,11,13,17,19}; int n,p,f[N][N... 阅读全文
摘要:
思路: f[i][j]表示i位数乘积为j的方案数 j的取值最多5000多种,那就开个map存一下好了 阅读全文
摘要:
思路: 水题 竟然不会做 尴尬 比b大的数=1 比b小的数=-1 找到b 统计一下左边比b大x的数有多少 扫右边的时候就查左边的表 就可以了 阅读全文
摘要:
思路: 二分+哈希 Manacher改一下条件 0只能匹配1 1只能匹配0 #匹配# (长度从0开始匹配 这样就相当于只能从#开始走了 也就是长度为偶数) 阅读全文
摘要:
思路: 对所有序列差分一下 公共串的长度+1就是答案了 二分 扫一遍height即可,.. 阅读全文
摘要:
思路: 直接上A* 阅读全文
摘要:
思路: 我们可以算不合法的 如果三个点都在同一侧 就不合法.. 用总方案数减掉就可以了 (有神奇的实现方法...) 阅读全文
摘要:
思路: 满足二分性质... 二分一下 就完了 阅读全文
摘要:
思路: f[i][j][S]表示从i到j压成S状态 j-m是k-1的倍数 $f[i][j][S<<1]=max(f[i][j][S<<1],f[i][m-1][S]+f[m][j][0]),$$f[i][j][S<<1|1]=max(f[i][j][S<<1|1],f[i][m-1][S]+f[m] 阅读全文