0pts Code:
#include <bits/stdc++.h>
using namespace std;
struct P{double x,y;};
struct L{P a,b;};
int n,m;
vector<L> ls;
vector<P> py;
double cr(P a,P b,P c){return(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}
bool isct(L x,L y){
double c1=cr(x.a,x.b,y.a),c2=cr(x.a,x.b,y.b),c3=cr(y.a,y.b,x.a),c4=cr(y.a,y.b,x.b);
if(fabs(c1)<1e-8||fabs(c2)<1e-8||fabs(c3)<1e-8||fabs(c4)<1e-8)return 1;
return c1*c2<0&&c3*c4<0;
}
double len(L x){return sqrt(pow(x.a.x-x.b.x,2)+pow(x.a.y-x.b.y,2));}
double sol(){
double r=0;
for(auto&l:ls){
vector<pair<double,int>>e;
for(int i=0;i<m;i++){
L ed={py[i],py[(i+1)%m]};
if(isct(l,ed)){
double t=0;
e.emplace_back(t,1);
e.emplace_back(t,-1);
}
}
sort(e.begin(),e.end());
int c=0;
double cv=0,p=0;
for(auto&x:e){
if(c>0)cv+=x.first-p;
c+=x.second;
p=x.first;
}
r=max(r,cv);
}
return r;
}
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
cin>>n>>m;
ls.resize(n);
for(int i=0;i<n;i++)cin>>ls[i].a.x>>ls[i].a.y>>ls[i].b.x>>ls[i].b.y;
py.resize(m);
for(int i=0;i<m;i++)cin>>py[i].x>>py[i].y;
printf("%.3lf\n",sol());
}