给一个多边形,问能放进去的最长的线段的长度。

我调了两个小时结果加了inline就过???什么东西啊。2000+MS->890MS

真实自闭啊。

dls寒假已经讲的很清楚了(别问我为什么现在才做)

就是枚举所有点对然后  求出来这条直线 与多边形所有点的 交点,然后遍历这些交点,相当于进行一个最大字段和的操作。

如何check线段是不是在内部的话取线段中点就可以

调了一晚上简直自闭了,我寻思我剪枝还比别人多,做法一样的怎么我就过不去呢??

感觉把campdiv2消化干净的话可以get到超级多的新姿势呢

 #include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef double db;
const db eps = 1e-;
const db pi = acos(-);
inline int sign(db k){
if (k>eps) return ; else if (k<-eps) return -; return ;
}
inline int cmp(db k1,db k2){return sign(k1-k2);}
inline int inmid(db k1,db k2,db k3){return sign(k1-k3)*sign(k2-k3)<=;}// k3 在 [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};}
int operator == (const point &k1) const{return cmp(x,k1.x)==&&cmp(y,k1.y)==;}
bool operator<(const point &k1)const {
int c = cmp(x,k1.x);
if(c)return c==-;
return cmp(y,k1.y)==-;
}
inline db abs(){ return sqrt(x*x+y*y);}
inline db abs2(){return x*x+y*y;}
inline db dis(point k1){return (*this-k1).abs();}
int getP() const{return sign(y)==||(sign(y)==&&sign(x)==-);}
};
inline db cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
inline db dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}
inline int inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);}
inline int onS(point k1,point k2,point q){return inmid(k1,k2,q)&&sign(cross(k1-q,k2-k1))==;}
point proj(point k1,point k2,point q){
point k=k2-k1;return k1+k*(dot(q-k1,k)/k.abs2());
}
inline int checkLL(point k1,point k2,point k3,point k4){//判重合或者平行
return cmp(cross(k3-k1,k4-k1),cross(k3-k2,k4-k2))!=;
}
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);
}
int n;point p[];
inline int contain(point q){ // 2 内部 1 边界 0 外部
int pd=;
for (int i=;i<=n;i++){
point u=p[i-],v=p[i];
if (onS(u,v,q)) return ; if (cmp(u.y,v.y)>) swap(u,v);
if (cmp(u.y,q.y)>=||cmp(v.y,q.y)<) continue;
if (sign(cross(u-v,q-v))<) pd^=;
}
return pd<<;
}
db ans=;
inline void slove(point x,point y){
vector<point> v;
for(int i=;i<n;i++){
if(sign(cross(y-x,p[i]-x)*cross(y-x,p[i+]-x))<= ){
point v1 = y-x,v2=p[i+]-p[i];
if(sign(cross(v1,v2)) == ){
v.push_back(p[i]);
v.push_back(p[i+]);
}
else v.push_back(getLL(x,y,p[i],p[i+]));
}
}
sort(v.begin(),v.end());
v.resize(unique(v.begin(),v.end())-v.begin());
db tmp=;int m = v.size()-;
for(int i=;i<m;i++){
point mid = (v[i]+v[i+])/;
if(contain(mid)){
tmp+=v[i+].dis(v[i]);
}else{
ans = max(ans,tmp);
tmp = ;
if(v[i+].dis(v[m])<=ans)
return;
}
}
ans = max(ans,tmp);
}
int main(){
//freopen("secret-046.in","r",stdin);
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
}
p[n]=p[];
for(int i=;i<n-;i++){
for(int j=i+;j<n;j++){
slove(p[i],p[j]);
}
}
printf("%.9f\n",ans);
}
/**
5
2 0
2 3
1 1
0 2
0 0
*/

wf 2017A的更多相关文章

  1. 转《WF编程》笔记目录

    <WF编程>笔记目录 2008-03-18 09:33 by Windie Chai, 26803 阅读, 49 评论, 收藏, 编辑 WF笔记开始 <WF编程>系列之0 - ...

  2. wf(七)(手把手包会)

    这个demo中我们将用If/Else逻辑加到工作流用来展示不同的message通过自定义的条件. 如果name的字符数是奇数,第一个单词就输出“Greeting”否则输出“Hello”. 1. 在Sa ...

  3. wf(五)

    测试工作流: 运用wf(四)的solution: 创建单元测试项目: 1.选择HelloWorkflow解决方案,右键选择添加新建项目:选择单元测试模板,命名为HelloWorkflow.Tests. ...

  4. wf(四)

    我们已经在c#和xaml上编写了工作流,或者有的人会觉得在xaml上编写的workflow没什么优点,然而其实xaml其实具有一些很特别的优势. 1. xaml支持工作流设计器,c#不支持: 2. x ...

  5. wf(三)

    前言: 到现在我们可以看到,WF4包含一个.xmal 文件的设计器和一个调用活动的runtime.当你创建自己的工作流的时候,你是同时也创建了一个活动, 因为活动是一个继承System.Activit ...

  6. WF(二)

    步骤一: 运用WF(一)中创建好的solution 重命名Workflow1.xaml,变为SayHello.xaml 并在属性窗口设置名称为HelloWorkflow.SayHello,如下图: ( ...

  7. [WF] Quickstart Sample

    [WF] Quickstart Sample 前言 Workflow Foundation(WF),总是给人一种很有用.可是却不知道怎么用的印象.这主要是因为前置的功课太多.要整合很多底层知识,才能完 ...

  8. CS中调用微软自带com组件实现音频视频播放(wf/wpf)

    1.mp3播放器:工具箱中右键,在弹出的菜单中选择“选择项”,添加“com组件”,选择名称“windows Media Player",点击确定就会在工具箱新增一个“windows Medi ...

  9. WF 快速入门

    WF(Windows Workflow Foundation ,中文译为:Windows工作流基础)是一种基于更高级抽象概念的编程语言,适合于实现业务流程.虽然可以通过使用图形化的工具(Workflo ...

随机推荐

  1. dom4j,json,pattern性能对比【原】

    报文大概2000字节,对比时为只取其中某个节点的值即可. 以下对比可知取少量节点时pattern性能是远大于dom4j,和json的, 但取大量的时候就不能这么以偏概全了. dom4j和pattern ...

  2. oldboy s21day07(深浅拷贝及文件操作)

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.看代码写结果'''v1 = [1, 2, 3, 4, 5]v2 = [v1, v1, v1]v1.app ...

  3. 使用select为描述符设置超时

    int readable_timeo(int fd, int sec) { fd_set rset; struct timeval tv; FD_ZERO(&rset); FD_SET(fd, ...

  4. Java(4)switch选择结构

    一.switch结构(开关语句)的语法 switch(表达式 ){--->类型为int.char case  常量1 :--->case 结构可以有多个 //语句块1 break;---& ...

  5. 设计模式一: 单例模式(Singleton)

    简介 单例模式是属于创建型模式的一种(另外两种分别是结构型模式,行为型模式).是设计模式中最为简单的一种. 英文单词Singleton的数学含义是"有且仅有一个元素的集合". 从实 ...

  6. “百度杯”CTF比赛 2017 二月场 爆破-3

    进入题目,题目源码: <?php error_reporting(0);session_start();require('./flag.php');if(!isset($_SESSION['nu ...

  7. [Linux容器]当我们谈容器的时候,我们在谈什么

    Docker在当下很火,那么,当我们谈Docker,谈容器的时候,我们在谈什么? 或者说,你对Docker,对容器了解吗?容器,到底是怎么一回事儿? 这篇文章着重来讲一下Linux容器,为什么强调Li ...

  8. FTP:mget匹配文件名后下载

    需求:从FTP某目录取每日构建的apk下载到本地 难点:文件名中有构建时间,而这个时间不算固定值,因此文件名不固定 解决方案:mget匹配文件名后下载 BAT版本: :: Filename:Proje ...

  9. 【原创】大数据基础之Ambari(1)简介、编译安装、使用

    官方:http://ambari.apache.org/ The Apache Ambari project is aimed at making Hadoop management simpler ...

  10. Java中解决前端的跨域请求问题

    在最近的分布式项目中,由于前端需要向后台请求数据,但不是同一个域名的,常用的ajax方法并不能成功调用,索然后台有数据返回,但是并不能被前端正常解析. 于是便查询知道了后台返回的数据格式的问题.不能用 ...