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. HDU4742 CDQ分治,三维LIS

    HDU4742 CDQ分治,三维LIS 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意: 每个球都有三个属性值x,y,z,要求最长的lis的 ...

  2. Java 注解与单元测试

    注解 Java注解是在JDK1.5 之后出现的新特性,用来说明程序的,注解的主要作用体现在以下几个方面: 编译检查,例如 @Override 编写文档,java doc 会根据注解生成对应的文档 代码 ...

  3. Qt4.5 QFrame(相当于Delphi里的TPanel,有各种凹凸方式)

    QFrame类是有框架的窗口部件的基类. QPopupMenu使用这个来把菜单“升高”,高于周围屏幕.QProgressBar有“凹陷”的外观.QLabel有平坦的外观.这些有框架的窗口部件可以被改变 ...

  4. PyCharm永久破解方法

    1,下载破解补丁: https://pan.baidu.com/s/1LcXvupL00XTU-HHE1J6ynA 提取码: 8t1w 下载补丁文件 jetbrains-agent.jar 并将它放置 ...

  5. 深入CAS的底层实现机制,以及对应的使用风险

    概述 CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术.CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原 ...

  6. Z字形变换 leetcode 6

    一.按行存储 1.解题思路 1.通过当前行的不断上下循环移动 2.将字符按序存放入vector中 3.最后再按行取出 2.代码及注释 class Solution { public: string c ...

  7. SpringCloud + Consul服务注册中心 + gateway网关

    1  启动Consul 2  创建springcloud-consul项目及三个子模块 2.1 数据模块consul-producer 2.2 数据消费模块consul-consumer 2.3 ga ...

  8. Java实现上传文件到指定服务器指定目录

    前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上.本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch.毕竟有现成的就很舒服,在此介绍给大家. 具体实现 引入的pom ...

  9. 单机Web后端接口服务压力测试

    单机Web后端接口服务压力测试 工具:Apache jmeter 环境:Window 10 语言:Kotlin + java 架构:SpringBoot + + Mysql + redis + Spr ...

  10. 关于AWD线下攻防的经验

    备份:     1.备份源码,使用图像化工具连接ssh后,我喜欢用winscp,         找到根目录后,直接右键后台下载就行.           找根目录这里,有时候比赛不给根目录位置,上次 ...