gym101808 E
提问:我是什么品种的傻逼?
哇看到积水兴高采烈啊。然后就走上了一条不归路。
为什么不归呢,因为我这个法子就是不对的,我总是在想很多很多点围成的一块区域,然后求这一块区域的面积。
然后尝试了各种扫描方法,递增序列,找最低,找最高啊什么的。
自闭。
搜题解:考虑所有相邻的两个点,和他们两边的制高点。那么面积可能是 梯形(制高点高),直角三角形(相交),0.
然后就完了。。。
哇小学数学题难死了啊。
我是智障啊。
#include <bits/stdc++.h>
using namespace std;
typedef double db;
const int N = 1e5+;
const db eps=1e-;
const db pi=acos(-);
int sign(db k){
if (k>eps) return ; else if (k<-eps) return -; return ;
}
int cmp(db k1,db k2){ return sign(k1-k2);}
struct point {
db x,y;
point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
point operator * (db k1) const{return (point){x*k1,y*k1};}
point operator / (db k1) const{return (point){x/k1,y/k1};}
db abs(){ return sqrt(x*x+y*y);}
db dis(point k1){ return (*this-k1).abs();}
};
db cross(point k1,point k2){ return k1.x*k2.y-k1.y*k2.x;}
db dot(point k1,point k2){ return k1.x*k2.x+k1.y*k2.y;}
point proj(point k1,point k2,point q){
point k=k2-k1;return k1+k*(dot(q-k1,k)/k.abs());
}
point getLL(point k1,point k2,point k3,point k4){
db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3); return (k1*w2+k2*w1)/(w1+w2);
}
db area(vector<point> A){ //
db ans=;
for (int i=;i<A.size()-;i++)
ans+=cross(A[i]-A[],A[i+]-A[]);
return ans/;
}
int t,n;
point a[N];
db pre[N],las[N];//
vector<point> v;
int main(){
//freopen("awsl.in","r",stdin);
scanf("%d",&t);
while (t--){
memset(pre,, sizeof(pre));
memset(las,, sizeof(las));
memset(a,, sizeof(a));
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
for(int i=;i<=n;i++){
pre[i]=max(pre[i-],a[i].y);
}
for(int i=n;i>=;i--){
las[i]=max(las[i+],a[i].y);
}
db ans = ;
for(int i=;i<n;i++){
if(a[i].y>a[i+].y){
db cut = min(min(las[i+],pre[i+]),min(las[i],pre[i]));
if(cut>=a[i].y){
ans+=(cut-a[i].y+cut-a[i+].y)*(a[i+].x-a[i].x)/;
} else if(cut>a[i+].y){
point p1 = point{1.0,cut};
point p2 = point{2.0,cut};
point xxx = getLL(p1,p2,a[i],a[i+]);
ans+=(xxx.y-a[i+].y)*(a[i+].x-xxx.x)/;
}
} else{
db cut = min(min(las[i+],pre[i+]),min(las[i],pre[i]));
if(cut>=a[i+].y){
ans+=(cut-a[i].y+cut-a[i+].y)*(a[i+].x-a[i].x)/;
} else if(cut>a[i].y){
point p1 = point{1.0,cut};
point p2 = point{2.0,cut};
point xxx = getLL(p1,p2,a[i],a[i+]);
ans+=(xxx.y-a[i].y)*(xxx.x-a[i].x)/;
}
}
}
printf("%.10f\n",ans);
}
}
gym101808 E的更多相关文章
随机推荐
- python测试开发django-52.xadmin添加自定义的javascript(get_media)
前言 我想使用xadmin在列表页每一行元素添加一个按钮,当点击这个按钮的时候,能发个请求出去,后台执行相关功能.于是想到添加自定义的javascript脚本能实现. 在/stackoverflow上 ...
- adb devices 找不到设备的解决方法
1.开启adb 2.查看设备时的报错 问题1:cannot connect to daemon 解决方法:找到占据5037端口的进城,并在“任务管理器”中依据“PID”查找到,解决进程 问题2:手机 ...
- golang基础学习及web框架
golang的web框架 web框架百花齐放:对比 Go Web 编程 Go Web Examples Golang 适合做 Web 开发吗? beego beego简介 go-restful gol ...
- mysql-linux定时备份mysql数据库
sh脚本 #!/bin/bash db_user="数据库用户名" db_passwd="数据库密码" db_name="数据库名" cd ...
- react diff 原理
(1) 把树形结构按照层级分解,只比较同级元素.(2) 列表结构的每个单元添加唯一的 key 属性,方便比较.(3) React 只会匹配相同 class 的 component(这里面的 class ...
- EntityFramework.Extended 对EF进行扩展
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- memcache源码编译安装
问题描述: memcached未授权漏洞.运行账户root,对未授权,官方也没有账户认证,也想不明白,为啥不搞个账户认证memcached..... 问题解决: 未授权,网上大部分通过防火墙实现对未知 ...
- 开发app前需要提前准备的资料
需要准备的资料整理如下: 1 域名未注册,建议在 阿里云注册:https://www.aliyun.com/,2 服务器https://ecs-buy.aliyun.com/配置:计费方式:包年包月地 ...
- Cordova 项目 加载不出XML文件
解决方法:copy bundle 将文件移除再添加
- python中字符串前的r什么意思
Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码.如果要指定编码方式,可在文件 ...