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. gradle 打包后第三方登录不上

    使用 gradlew clean assembleReleaseChannels 生成不用的渠道包后 第三方登录不上 原因:打包未设置好APP的 .keystore

  2. 【转】Elasticsearch学习笔记

    一.常用术语 索引(Index).类型(Type).文档(Document) 索引Index是含有相同属性的文档集合.索引在ES中是通过一个名字来识别的,且必须是英文字母小写,且不含中划线(-):可类 ...

  3. Linux 操作虚拟机、数据库

    1.打开虚拟机,输入命令:ifconfig 查看iP和端口号,端口号一般为:22 2.打开Xshell(先安装好),连接虚拟机(根据iP和端口号) 若连接成功,Xshell则会显示虚拟机的ip和端口号 ...

  4. Centos7源码编译安装mysql8

    前面介绍了很多关于mysql的文章,下面主要介绍一下mysql8的源码编译安装 一 基本环境 [root@CentOS-7-x86-64-Minimal-1810 ~]# cd /usr/local/ ...

  5. Gif动图压缩java版

    简单说明下,如果不是压缩动图的话只用java本身的包足够实现压缩和截取图片了,为了能够压缩gif动图,这里引用了两个文件 AnimatedGifEncoder 和 GifDecoder, 先用Deco ...

  6. Dubbo RPC调用参数校验---错误message自动返回

    Dubbo 的RPC调用中Consumer 和 Provider端都可以对调用的方法做传参验证,参数的验证可以通过JSR303规范 (Java Specification Requests) 提到的 ...

  7. php strcmp函数漏洞

    strcmp函数漏洞 适用5.3版本以前的php 函数作用:字符串比较 要求传入字符串.如果传入非字符串呢? 结果函数报错!但是函数返回“0”  . 虽然报错了但函数的判断却是“相等” 如何传入非字符 ...

  8. JS中常见的几种继承方法

    1.原型链继承 // 1.原型链继承 /* 缺点:所有属性被共享,而且不能传递参数 */ function Person(name,age){ this.name = name this.age = ...

  9. mysql-5.7.9-winx64遇坑记

    昨天在mysql5.0上导入sql文件时,一直卡在一个地方报错,也没仔细分析,认为应该是mysql版本太低不支持这个语法而已.遂决心下载一个最新版本的mysql,却浑然不知前面无数的坑已经埋伏好了在等 ...

  10. Java程序员必备基础:内部类解析

    前言 整理了一下内部类的相关知识,算是比较全,比较基础的,希望大家一起学习进步. 一.什么是内部类? 在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类.内部类本身就是类的一个属性 ...