1.问有多少个大小为N的无标号无根树,直径恰好为L。$N,L \leq 200$


2.问一个竞赛图中有多少个长度为3、4、5的环。$N \leq 2000$


3.给出一些直线和单个点A,问这些直线的交点与A最近的M个距离之和为多少。$N \leq 50000,M \leq 10^7$。保证不存在两个交点与点A的距离相同。

二分圆的半径,算交点个数,最后统计答案用并查集。

 #include<bits/stdc++.h>
using namespace std;
typedef long double ld;
const int maxn=1E5+;
const ld eps=1E-;
const ld pi=acos(-);
const ld inf=1E12;
int n,m;
ld X,Y;
struct pt
{
ld x,y;
pt(ld a=,ld b=):x(a),y(b){}
pt operator+(const pt&A){return pt(x+A.x,y+A.y);}
pt operator-(const pt&A){return pt(x-A.x,y-A.y);}
pt operator*(const ld&d){return pt(x*d,y*d);}
pt operator/(const ld&d){return pt(x/d,y/d);}
ld operator*(const pt&A){return x*A.y-y*A.x;}
inline void out()
{
cout<<"("<<x<<","<<y<<")";
}
}O;
struct line
{
pt A,B;
line(pt a=pt(),pt b=pt()):A(a),B(b){}
}a[maxn];
struct BIT
{
int tot;
int t[maxn];
inline void clear(){memset(t,,sizeof(t));}
inline int lowbit(int x){return x&(-x);}
inline int ask(int x){int sum=;while(x){sum+=t[x];x-=lowbit(x);}return sum;}
inline void add(int x,int y){while(x<=tot){t[x]+=y;x+=lowbit(x);}}
}B;
int size;
struct info
{
int type,num;
ld x;
info(int a=,int b=,ld c=):type(a),num(b),x(c){}
bool operator<(const info&A)const
{
return x<A.x;
}
}tmp[maxn];
inline pt intersection(line a,line b)
{
pt A=b.B-b.A,B=a.B-a.A,C=b.A-a.A;
if(abs(A*B)<=eps)
return pt(inf,inf);
ld d=-(B*C)/(B*A);
return b.A+A*d;
}
inline pt T(pt A)
{
swap(A.x,A.y);
A.y=-A.y;
return A;
}
inline pt perpendicular(pt A,line x)
{
pt B=T(x.B-x.A)+A;
return intersection(line(A,B),x);
}
inline ld s(ld x)
{
return x*x;
}
int rk[][maxn];
inline bool check(ld r)
{
size=;
for(int i=;i<=n;++i)
{
pt A=perpendicular(O,a[i]);
ld x=s(A.x-O.x)+s(A.y-O.y);
if(x>=r*r+eps)
continue;
pt d=T((O-A)*sqrt(r*r/x-));
pt P1=A+d,P2=A-d;
ld x1=atan2(P1.y-O.y,P1.x-O.x);
ld x2=atan2(P2.y-O.y,P2.x-O.x);
if(!(x1<)&&!(x1>=))
{
x1=atan2(a[i].A.y-a[i].B.y,a[i].A.x-a[i].B.x);
if(x1<)
x2=x1+pi;
else
x2=x1-pi;
}
if(x1>x2)
swap(x1,x2);
tmp[++size]=info(,i,x1);
tmp[++size]=info(,i,x2);
}
sort(tmp+,tmp+size+);
for(int i=;i<=size;++i)
rk[tmp[i].type][tmp[i].num]=i;
B.clear();
B.tot=size;
long long sum=;
for(int i=;i<=size;++i)
{
if(tmp[i].type==)
B.add(i,);
else
{
sum+=B.ask(i-)-B.ask(rk[][tmp[i].num]);
B.add(rk[][tmp[i].num],-);
}
}
return sum>=m;
}
int fa[maxn];
int find(int x)
{
return x==fa[x]?x:fa[x]=find(fa[x]);
}
bool ok[maxn];
inline ld dis(pt A,pt B)
{
return sqrt(s(A.x-B.x)+s(A.y-B.y));
}
inline ld get(ld r)
{
size=;
for(int i=;i<=n;++i)
{
pt A=perpendicular(O,a[i]);
ld x=s(A.x-O.x)+s(A.y-O.y);
if(x>=r*r+eps)
continue;
ok[i]=;
pt d=T((O-A)*sqrt(r*r/x-));
pt P1=A+d,P2=A-d;
ld x1=atan2(P1.y-O.y,P1.x-O.x);
ld x2=atan2(P2.y-O.y,P2.x-O.x);
if(abs(O.x-A.x)<=eps&&abs(O.y-A.y)<=eps)
{
x1=atan2(a[i].A.y-a[i].B.y,a[i].A.x-a[i].B.x);
if(x1<)
x2=x1+pi;
else
x2=x1-pi;
}
if(x1>x2)
swap(x1,x2);
tmp[++size]=info(,i,x1);
tmp[++size]=info(,i,x2);
}
sort(tmp+,tmp+size+);
for(int i=;i<=n;++i)
for(int i=;i<=size;++i)
fa[i]=rk[tmp[i].type][tmp[i].num]=i;
fa[size+]=size+;
ld sum=;
for(int i=;i<=size;++i)
if(tmp[i].type)
{
int l=rk[][tmp[i].num];
fa[l]=l+,fa[i]=i+;
while((l=find(l))<i)
{
pt A=intersection(a[tmp[l].num],a[tmp[i].num]);
sum+=dis(intersection(a[tmp[l].num],a[tmp[i].num]),O);
++l;
}
}
return sum;
}
inline int R()
{
return rand()%-;
}
int main()
{
// freopen("stigmata.in","r",stdin);
// freopen("stigmata.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>X>>Y>>m;
X/=,Y/=;
for(int i=;i<=n;++i)
{
ld x,y;
cin>>x>>y;
x/=,y/=;
a[i]=line(pt(,y),pt(,*x+y));
}
O=pt(X,Y);
ld L=,R=,mid;
while(abs(L-R)>0.00000001)
{
mid=(L+R)/;
if(check(mid))
R=mid;
else
L=mid;
}
cout<<fixed<<setprecision()<<get(R)<<endl;
return ;
}

[校内训练20_01_20]ABC的更多相关文章

  1. [校内训练20_01_22]ABC

    1.给出序列A,求序列B,使得bi|ai,lcm(b1,b2,...,bn)=lcm(a1,a2,...,an)且字典序最小. 可以发现,对于某个质数p,它有一个最大的次数k,将pk放在尽可能靠后且能 ...

  2. [校内训练20_01_19]ABC

    1.SB题 2.有n个点,m条边,每次加入一条边,你要挑出一些边,使得形成的图每个点度数都为奇数,且最长的边最短. 3.给一个N次多项式,问有多少个质数在任意整数处的点值都是p的倍数,输出它们.$N ...

  3. [校内训练20_01_17]ABC

    1.平面上每次加入直角边平行于坐标轴的等腰直角三角形,每次询问某个点被覆盖了多少次. 大常数算法:O(nlog^2) #include<bits/stdc++.h> using names ...

  4. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  5. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  6. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  7. 19_04_19校内训练[Game]

    题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...

  8. 19_04_02校内训练[deadline]

    题意 给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定.染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的 ...

  9. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

随机推荐

  1. mysql find_in_set 与 in 的用法与区别,mysql范围搜索,mysql范围查询

    mysql find_in_set 与 in 的用法与区别 1.find_in_set 用于模糊查询,并且数据库中的值是用英文逗号分隔的: 例如: (1).去字段中查询 select find_in_ ...

  2. 错误 137 (net::ERR_NAME_RESOLUTION_FAILED):未知错误

    上午装了一个软件(APMServ 5.2.6) 1.点击启动Apache不成功,mysql却成功了.后来知晓是80端口冲突的问题 2.当时却不知道,就鬼使神差的   点击了  边上的  解决冲突问题 ...

  3. 在网上找到的一些Java封装的utils类

    这是网址:https://github.com/hanyunpeng0521/utils

  4. POJ 3111 K Best 最大化平均值 [二分]

    1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高 2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有 ...

  5. 使用SonarQube+Eclipse来分析python代码

    背景 最近在项目中推广集成测试的理念以及相关工具,在jenkins中集成sonar去分析项目的java代码的时候,意外的发现,sonarqube上还有对应python的插件,而自己写的测试工具大部分都 ...

  6. Python综合应用:教你用字符打印一张怀旧风格的照片

    1. 前言第一次在学校机房里见到计算机,还是上古时期.计算机型号大概是LASER-310吧,有点记不清了.那会儿,显示器还是单色的,只能显示文本,每行最多显示80个字符.想看图片,印象中只能用针式打印 ...

  7. 洛谷$P2150\ [NOI2015]$寿司晚宴 $dp$

    正解:$dp$ 解题报告: 传送门$QwQ$. 遇事不决写$dp$($bushi$.讲道理这题一看就感觉除了$dp$也没啥很好的算法能做了,于是考虑$dp$呗 先看部分分?$30pts$发现质因数个数 ...

  8. 公子奇带你一步一步了解Java8中Lambda表达式

    在上一篇<公子奇带你一步一步了解Java8中行为参数化>中,我们演示到最后将匿名实现简写为 (Police police) -> "浙江".equals(poli ...

  9. notpad++使用cmd的快捷键设置

    notepad++运行批处理的设置: 运行 --> 输入运行程序名"$(FULL_CURRENT_PATH)" --> 保存(自定义的快捷键即可运行)

  10. ORA-00903表名无效关于${}和#{}的使用

    相当于对数据 加上 双引号,$相当于直接显示数据 ${xxx}这样格式的参数会直接参与SQL编译,从而不能避免注入攻击 但可以使用在from之后传入表名 {}占位符? where之后 防止注入