题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不需要合并同类项(然后有许多人因为这个爆〇了) 一看这种题目形式明显就是大数据结构,外面的序列明显线段树维护,次数也可以用线段树,但是线段树套线段树容易MLE: 所以用树状数组套线段树实现 具体就是以1~n为下标建线段树,外面用树状数组维护次数,每次在树状数组上查询即可 写完过样例直接1A就是爽 代码…
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$直接到达终点的概率,显然期望步数就是$\frac{1}{f_i}$: 考虑转移,设下一个事件概率为$p$,则 如果下一个事件是敌人:$f_i=f_{i+1}*p$ 如果下一个事件是旗子: $f_{i}=(1-p)*(1-f_{i+1})*(1+p*(1-f_{i+1})+p^{2}*(1-f_{i+…
一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后用链表维护这些点的集合,每次alloc操作就相当于割开未分配的区间,即增加了一个点,free操作就相当于合并.所以最多会产生$n$个点,单次操作$O(n)$,时间复杂度$O(n^2)$但是不满,貌似常数小就可以拿60: 把这个集合看成一个序列的话,快速修改点的信息肯定会想到线段树,正解就是用线段树去…
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂我都没看懂...我写的是每三位拆分然后再合并 代码: //强烈谴责卡常数而需要大量优化 //upd:还卡精度... #include<algorithm> #include<iostream> #include<cstring> #include<cstdio>…
矩阵快速幂原来还可以这么用?? 你们城里人还真会玩. 我们令$f[i][j][k]$表示总的钱数为i,当前使用的最大面值硬币的面值为$v_j$,最小为$v_k$的方案数量. 不难发现$f[i][j][k]=\sum f[a][j][l]\times f[b][l][k] $其中$l∈[k,j],a+b=i$. 很显然,这个转移过程不就是矩阵乘法的过程吗?? 考虑到$\forall v_i>v_j$,有$gcd(v_i,v_j)=v_j$,则$f[v_i]$可以由$f[v_j]$通过矩阵乘法转移得…
题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define inf 100000000000000000…
题解: 题解居然是LCT……受教了 把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可. 代码: #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; typedef long long ll; struct node{…
Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于,这个d不是定值啊,这使得DP的进行比较困难. 于是这个神奇解法在DP过程中把d省去了! 状态表示 $f [u][i]$: 以u为根的子树内,到u的距离为i的节点个数,$f [u][0]=1$ . $g [u][i]$:以u为根的子树内,存在多少点对 (a,b),它们到它们的lca的距离都为d,且它…
Description  Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组的有色无向边.求一种方案,包括若干个不相交的连通块,覆盖全部点,每个连通块满足能一笔画(不经过重复的点)并且相邻两次经过的边颜色不相同(开头和结尾经过的边也不能相同). 是不是有点类似二分图匹配的问题呢?我们还是考虑用最大流来建图. 一笔画的时候,每一个经过的点有且只有一条入边,有且只有一条出边,即…
Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同于前两个点子树上, 也有可能在重心往上走可以到达的位置上. 定义数组\(f[i][j]\)表示在以\(i\)为根的子树下与\(i\)的距离为\(j\)的节点个数; \(g[i][j]\)表示在以\(i\)为根的子树下, 有多少个点对满足如下条件: 这个点对到它们LCA的距离相同, 我们假设其为\(d…