FJ省队集训DAY4 T2】的更多相关文章

XXX #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<vector> using namespace std; typedef unsigned long long ll; ll a,mod=,L=; ll tr[],b[],tmp[]; std::vector <ll>…
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> typedef long long ll; ll read(){ ll t=,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return t*f; } ; ],tot=,cnt[],C[][]; l…
直接上题解 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define ll long long ,N=; ll jc[N+],jcny[N+],jcnys[N+],K[N+],p[N+],f[N+]; int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +ch-…
思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用tarjan #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define ll long long ; struc…
思路:我们可以考虑三角剖分,这样问题就变成考虑三角形的选取概率和三角形内有多少个点了. 先用树状数组预处理出三角剖分的三角形中有多少个点,然后用线段树维护,先用原点极角排序,然后枚举i,再以i极角排序,此时线段树的作用就来了,每次到一个询问的教室点,我们就在线段树里面查找之前的概率,统计贡献即可. #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<…
思路:发现如果一个人一共选了x个点,那么选中某一个点对的概率都是一样的,一个人选x个点的总方案是C(n,x),一个人选中某个点对的总方案是C(n-2,x-2),这样,那么选中某个点对的概率就是 x*(x-1)/(n*(n-1)),这样,我们就用树分治求出有多少对符合条件的对数,然后乘上每个人的概率即可. #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include…
思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的id 我讲的貌似不是很清楚.. 还有,蜜汁80分,打死也改不出来.. #include<cstdio> #include<cmath> #include<iostream> #include<cstring> #include<algorithm>…
思路:转换成n条三维空间的直线,求最大的集合使得两两有交点. 有两种情况:第一种是以某2条直线为平面,这时候只要统计这个平面上有几条斜率不同的直线就可以了 还有一种是全部交于同一点,这个也只要判断就可以了. 然后我并不能改出来,wa了好多个点 WA的程序: #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #defin…
题意:有一堆兔子,还有一个r为半径的圆,要求找到最大集合满足这个集合里的兔子两两连边的直线不经过圆. 思路:发现如果有两个点之间连边不经过圆,那么他们到圆的切线会构成一段区间,那么这两个点的区间一定会有交集,形如s0 s1 e0 e1 同样的,如果是n个点,那就是s0 s1 s2..sn e0 e1 e2.. en 因此,我们枚举那个起始点,然后对于其他点我们按照s排序,对于e做最长上升子序列即可.时间复杂度O(n^2 logn) #include <cstdio> #include <…
思路:状态压缩dp,f[i][j[[k]代表i行j列这个格子,连续的状态为k,这个连续的状态是什么?就是下图 X格子代表我当前走到的地方,而这里的状态就是红色部分,也就是连续的一段n的状态,我们是分每一位计算的,这样就可以转移了,注意,当当前点在最下面的时候要额外计算一个与1的贡献. 坑爹,inf设小了只有30分. #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #i…