提问:我是什么品种的傻逼?

哇看到积水兴高采烈啊。然后就走上了一条不归路。

为什么不归呢,因为我这个法子就是不对的,我总是在想很多很多点围成的一块区域,然后求这一块区域的面积。

然后尝试了各种扫描方法,递增序列,找最低,找最高啊什么的。

自闭。

搜题解:考虑所有相邻的两个点,和他们两边的制高点。那么面积可能是 梯形(制高点高),直角三角形(相交),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的更多相关文章

随机推荐

  1. ps保存时提示最大兼容

    在菜单:编辑-首选项-文件处理可以设置要不要询问

  2. too much recursion(太多递归)Uncaught RangeError: Maximum call stack size exceeded BootstrapValidator报错

    在BootstrapValidator中已默认遵守Bootstrap规则,form里的每个输入项目必需包含在类为form-group的标签里,否则BootstrapValidator中定义的field ...

  3. git强制修改注释

    在一些公司项目中,常常要求git注释提交的时候加上前缀,比如JIRA号,但是有的时候我们常常会忘了 如果用source tree等一些工具,会推送到本地仓库一半,但远程又上不去. 这个时候我们就需要强 ...

  4. 学习ReentrantLock

    1. 使用ReentrantLock import java.util.concurrent.locks.ReentrantLock; public class TestReentrantLock { ...

  5. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  6. App安全

    经常做的网络参数加密解密,以及防止数据重放之外,还提到了防范反编译的风险,其实Apple算比较安全的了,反编译过来也就看到.h文件....但把代码混淆还是会比较好些. 一.iOS 中的网络加密 公司的 ...

  7. CentOS 6.5 x64相关安全,优化配置

    一.安全 1.修改密码长度: [root@CentOS64 ~]# vi /etc/login.defs PASS_MAX_DAYS 99999   //用户的密密码最长使用天数 PASS_MIN_D ...

  8. Window 包管理工具: chocolatey

    传送门 # 官网 https://chocolatey.org/install # 发生错误看看这个https://yevon-cn.github.io/2017/03/12/install-choc ...

  9. Metadata GC Threshold导致的full gc分析

    gc log 两次full gc 均是Metadata GC导致, OpenJDK -Bit Server VM ( :: by (Red Hat -) Memory: 4k page, physic ...

  10. HADOOP security

    https://www.microsoft.com/en-us/trustcenter/security/azure-security https://docs.microsoft.com/en-us ...