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

我调了两个小时结果加了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. 轴对称 Navier-Stokes 方程组的一个点态正则性准则

    对轴对称 NSE, 我们改进了 [Pan, Xinghong. A regularity condition of 3d axisymmetric Navier-Stokes equations. A ...

  2. Ubuntu18.04问题记录

    1. pip install 包时偶然间碰上了如下问题: Could not install packages due to an EnvironmentError: [Errno 13] 权限不够: ...

  3. win10自带邮箱添加网易企业邮箱

    开始-邮件-账户-添加账户-高级安装程序-internet电子邮件-然后输入网易企业邮箱的用户名和相关服务器设置就行了 接收服务器 pop.qiye.163.com发送服务器 smtp.qiye.16 ...

  4. ADO五大对象

     ADO.NET五大对象, 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只 ...

  5. MapReduce输出文件名更改

    默认情况下生成的文件名是part-r-00000格式,想要自定义生成输出文件名可以使用org.apache.hadoop.mapreduce.lib.output.MultipleOutputs类用来 ...

  6. Django之AJAX

    一.预备知识JSON python中的json: json.dumps( )      json.loads( ) JavaScript中的json:JSON.stringify( )       J ...

  7. 论文笔记:Cross-Domain Visual Matching via Generalized Similarity Measure and Feature Learning

    Cross-Domain Visual Matching,即跨域视觉匹配.所谓跨域,指的是数据的分布不一样,简单点说,就是两种数据「看起来」不像.如下图中,(a)一般的正面照片和各种背景角度下拍摄的照 ...

  8. 帆软报表(finereport)参数组合/下拉参数联动

    首先实现下拉参数联动 1.参数的定义→添加控件绑定数据→参数过滤和参数面板样式 下拉复选框控件注意事项:select * from tablewhere 1=1${if(len(控件名称)=0,&qu ...

  9. iOS app内打开safari完成google的OAuth2认证

    最近使用google的oauth认证,发现不再允许使用UIWebview进行认证了,必须使用系统游览器,使用游览器也不一定要在app之间跳转,ios使用SFSafariViewController就可 ...

  10. using 关键字的作用

    我们都知道可以使用using关键字引入命名空间,例如:using namespace std; using还有个作用是在子类中引入父类成员函数. 1) 当子类没有定义和父类同名的函数(virtual也 ...