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. [Linux] 利用tcpdump和strace进行debug

    比如说要查看所有的sql查询语句,数据库的端口是3306 tcpdump -i any port 3306 -l -s 0 -w -|strings|grep -A 5 select 要查看所有的调用 ...

  2. 21.python的模块(Module)和包(Package)

    目录 模块(Module)和包(Package) 模块(modue)的概念 模块导入方法 1.import 语句 2.from-import 语句 3.from-import* 语句 4.运行本质 i ...

  3. docker mysql配置挂载到卷

    docker--将mysql配置挂载到卷 1.首先在根目录创建两个文件夹,其中config文件夹中创建my.cnf配置文件.data文件夹存放数据文件,一定要为空. /docker/mysql/con ...

  4. 洛谷P-4782 2-sat+Tarjan

    https://www.luogu.org/problemnew/solution/P4782 这里的大佬已经说的够好了 #include<iostream> #include<cs ...

  5. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

  6. 「SP25784」BUBBLESORT - Bubble Sort 解题报告

    SP25784 BUBBLESORT - Bubble Sort 题目描述 One of the simplest sorting algorithms, the Bubble Sort, can b ...

  7. gulp的简介以及使用方法

    环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境. pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样. test环境:测试环境,外部用户 ...

  8. 用python做推荐系统(二)

    一.简介 继上一篇基于用户的推荐算法,这一篇是要基于商品的,基于用户的好处是可以根据用户的评价记录找出跟他兴趣相似的用户,再推荐这些用户也喜欢的电影,但是万一这个用户是新用户呢?或是他还没有对任何电影 ...

  9. Pandas 数据分析,高中体测练习

    分析体测成绩 需求: 体侧成绩转变成分数 开卷考试 excel完成可以 pandas读取excel代码中 完成 一个手输入 进一步,画图,分布,体重正常,肥胖,偏瘦比例,绘制饼图 男生跑步1000成绩 ...

  10. redux一些自习时候自己写的的单词

    setState:设置状态 render:渲染,挂载 dispatchEvent : 派发事件 dispatch:分发,派遣:库里的一个方法,简而言之相当于一个actions和reducer监听方法更 ...