2019南昌邀请赛 L 计算几何 G(待补)
#include<bits/stdc++.h>
const double PI=acos(-1.0);
const double TT=PI/;
using namespace std;
struct Point { double x,y; Point(){} Point(double x, double y) :x(x), y(y){} };;
struct Segment{ Point a,b; Segment(Point x,Point y ) { a=x;b=y; }; Segment(){}; };;
struct Line { Point a,b; Line(Point x,Point y ) { a=x;b=y; }; Line(){}; };;
typedef Point Point;
Point operator + (Point A, Point B){ return Point(A.x+B.x, A.y+B.y); } // 向量相加
Point operator - (Point A, Point B){ return Point(B.x-A.x, B.y-A.y); } // 向量生成 A-B;
double operator * (Point A, Point B){ return A.x*B.x-A.y*B.y; } // 点积
double operator ^ (Point A, Point B){ return A.x*B.y-A.y*B.x; } // 叉积
double Dot(Point A, Point B) { return A.x*B.x + A.y*B.y; } // 点积
double Cross(Point A, Point B) { return A.x*B.y-A.y*B.x; } // 叉积
double Length(Point A) { return sqrt(Dot(A, A)); } // 向量长度
double dis(Point a,Point b) { return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) ); }
Line qq;
bool check(Segment A,Line B)
{
Point a=A.a; Point b=A.b;
Point c=B.a; Point d=B.b;
if(Cross(a-c,a-d)*Cross(b-c,b-d)> ) return ;
else return ;
return ;
}
Point make(Segment A,Line B)
{
Point a=A.a; Point b=A.b;Point c=B.a; Point d=B.b;
double A1=b.y-a.y,B1=-(b.x-a.x),C1=b.y*a.x-b.x*a.y;
double A2=d.y-c.y,B2=-(d.x-c.x),C2=d.y*c.x-d.x*c.y;
double k=A1*B2-A2*B1;
double x=-(B1*C2-C1*B2)*1.000000000/k;
double y=(A1*C2-C1*A2)*1.00000000/k;
Point kk; kk.x=x; kk.y=y; return kk;
}
double dfs(double l,int k,int d,Point x,double ff)
{
if(k==d) return ;
double ans=;
Segment x1;
x1.a=x;
x1.b.x=x.x+l*sin(ff); x1.b.y=x.y+l*cos(ff);
Point W;
W.x=x.x+l*sin(ff); W.y=x.y+l*cos(ff);
if(check(x1,qq)==)
{
ans+=l;
ans+=dfs(l/,k+,d,W,ff-TT);
ans+=dfs(l/,k+,d,W,ff);
ans+=dfs(l/,k+,d,W,ff+TT);
}
else
{
Point P=make(x1,qq); ans+=dis(x,P);
}
return ans;
}
void work(double l,int d)
{
Segment x1;
x1.a.x=; x1.a.y=;
x1.b.x=; x1.b.y=l;
double ans=;
Point W; W.x=; W.y=l;
if(check(x1,qq)==)
{
ans+=l;
ans+=dfs(l/,,d,W,-TT);
ans+=dfs(l/,,d,W,);
ans+=dfs(l/,,d,W,TT);
}
else
{
Point x;
x.x=;
x.y=;
Point P=make(x1,qq); ans+=dis(x,P);
}
cout<<ans<<endl;
}
int main()
{
cout<<fixed<<setprecision();
int T; cin>>T;
while(T--)
{
int d;
double l,x1,y1,k; cin>>l>>d>>x1>>y1>>k;
qq.a.x=x1; qq.a.y=y1;
qq.b.x=x1+; qq.b.y=y1+k*;
work(l,d);
}
}
2019南昌邀请赛 L 计算几何 G(待补)的更多相关文章
- 2019南昌邀请赛网络预选赛 M. Subsequence
传送门 题意: 给出一个只包含小写字母的串 s 和n 个串t,判断t[i]是否为串 s 的子序列: 如果是,输出"YES",反之,输出"NO": 坑点: 二分一 ...
- 2019南昌邀请赛网络预选赛 J.Distance on the tree(树链剖分)
传送门 题意: 给出一棵树,每条边都有权值: 给出 m 次询问,每次询问有三个参数 u,v,w ,求节点 u 与节点 v 之间权值 ≤ w 的路径个数: 题解: 昨天再打比赛的时候,中途,凯少和我说, ...
- 2019南昌邀请赛网络预选赛 I. Max answer(单调栈+暴力??)
传送门 题意: 给你你一序列 a,共 n 个元素,求最大的F(l,r): F(l,r) = (a[l]+a[l+1]+.....+a[r])*min(l,r); ([l,r]的区间和*区间最小值,F( ...
- POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum
http://poj.org/problem?id=2796 https://nanti.jisuanke.com/t/38228 背景 给定一个序列,对于任意区间,min表示区间中最小的数,sum表 ...
- 2019南昌邀请赛网络赛:J distance on the tree
1000ms 262144K DSM(Data Structure Master) once learned about tree when he was preparing for NOIP(N ...
- [2019南昌邀请赛网络赛D][dp]
https://nanti.jisuanke.com/t/38223 Xiao Ming recently indulges in match stick game and he thinks he ...
- 2019南昌邀请赛预选赛 I. Max answer (前缀和+单调栈)
题目:https://nanti.jisuanke.com/t/38228 这题题解参考网上大佬的. 程序的L[i],R[i]代表a[i]这个点的值在区间 [L[i],R[i]] 中最小的并且能拓展到 ...
- 2019南昌邀请赛 C. Angry FFF Party 大数矩阵快速幂+分类讨论
题目链接 https://nanti.jisuanke.com/t/38222 题意: 定义函数: $$F(n)=\left\{\begin{aligned}1, \quad n=1,2 \\F(n- ...
- 南昌邀请赛网络赛 D.Match Stick Game(dp)
南昌邀请赛网络赛 D.Match Stick Game 题目传送门 题目就会给你一个长度为n的字符串,其中\(1<n<100\).这个字符串是一个表达式,只有加减运算符,然后输入的每一个字 ...
随机推荐
- 总结AWS使用要点
最近做毕业设计,要用AWS跑代码,以前只用过一次,这次踩了很多坑,记录一下.. AWS命令行管理S3 bucket AWS官方文档: http://docs.amazonaws.cn/cli/late ...
- vs code编写的时候自动回车的原因
今天在书写一个空白的scss文件的时候,刚打2个字就自动回车换行了: 测试了几次,发现了规律就是输入停下来0.5秒左右就会自动换行,比如,打了2个中文,再连续打一个句子,键盘虽然在动,但是vs cod ...
- DNS区域传送、子域授权
前言 DNS服务器搭建参考上一篇: DNS主从复制,就是将主DNS服务器的解析库复制传送至从DNS服务器,进而从服务器就可以进行正向.反向解析了.从服务器向主服务器更新查询数据,保证数据一致性,此为区 ...
- static(静态)关键字
class Person{String name; //成员变量,实例变量(实例中的变量) //共享数据出现在对象之前static String country="cn"; //对 ...
- 关于Linux时间设置的总结
系统环境:centos Linux的时间有两种,一种是系统时间,一种是硬件时间. 系统时间的查看:#date 系统时间的设置:#date -set 时间同步工具准备 Linux进行时间同步要使用一个工 ...
- Frist one
2017.11.27 10:20am 今天也许只是普通的一个周一上午 但是我希望在多年以后 在我回望这些年的努力学习中 今天会是最浓墨重彩的一笔 我时常感到焦虑 对未来的焦虑 对感情的焦虑 以至于 我 ...
- Java中常见的分页算法
在查询数据的时候或者展示数据的时候经常会使用分页,介绍几种简单的分页算法: //总的页数 int total = 30: //每页个数 int pageSize = 6; 1.one int ...
- linux 清理几天前的日志或文件
执行清理1天前的 war 包 find . -ctime +1 -name "*.war" -exec rm {} \;
- Unity more efficient find
Unity caches GameObjects based on their tags, so in a big scene with lots of objects, GameObject.Fin ...
- 让虚拟环境解决python多版本并行
一.安装篇 1.本文操作系统为CentOS7 依赖包(安装时可能还存在其他依赖包,结合报错进行安装) [root@Corre home]# yum install make build-essenti ...