[2019HDU多校第三场][HDU 6603][A. Azshara's deep sea]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6603
题目大意:给出一个凸包,凸包内有若干个圆,要求画尽可能多的对角线使得他们两两不在凸包内相交且不与任意一个圆有公共点
题解:先预处理出所有点对间的连线是否会和圆有公共点,记为x[i][j],之后进行区间DP。设f[i][d]表示从第\(i\)个点到\(i+d\)个点这个区间之内最多能画多少条对角线,那么就有\(f[i][d]=x[i][nxt]+max(f[i][d-1],f[i+1][d-1])\),答案取f[i][d]的最大值即可
复杂度分析:求凸包\(O(nlogn)\),预处理\(O(n^2g)\),DP\(O(n^2)\),总时间复杂度为\(O(n^2g)\)
吐槽:本题题面又臭又长,严重影响观看体验
给出的\(n\)个点不一定是凸包的顶点,所以要先求一次凸包,而且这么重要的条件居然是隐藏在巨大题面的一个小括号里的,坑了不少人
最后3分钟才发现这个隐藏条件,赶紧拉了个模板出来最后各种调参数终于在最后一分钟爆过去了orz...
#include<bits/stdc++.h>
using namespace std;
#define N 401
#define LL long long
const double eps=1e-;
int sgn(double x)
{
if (x<-eps) return -;
if (x>eps) return ;
return ;
}
struct Point
{
double x,y;
void read(){scanf("%lf%lf",&x,&y);}
Point operator -(const Point &t)const{return {x-t.x,y-t.y};}
double operator *(const Point &t)const{return x*t.y-y*t.x;}
double length()const{return sqrt(x*x+y*y);}
double ang()const
{
return atan2(1.0*y,1.0*x);
}
}b[N];
Point cent;
bool cmpang(const Point &p1,const Point &p2)
{
int tmp=sgn( (p1-cent).ang() - (p2-cent).ang() );
if (tmp!=) return tmp<;
return (p1-cent).length() < (p2-cent).length();
}
struct POLYGON
{
int n;
Point a[N];
void ChangetoConvex()
{
for (int i=;i<=n;i++)
if (a[i].x<a[].x||a[i].x==a[].x&&a[i].y<a[].y)
swap(a[],a[i]);
cent=a[];
sort(a+,a+n+,cmpang);
int top=;
for (int i=;i<=n;i++)
{
while(top>=&&
(a[top]-a[top-])*(a[i]-a[top])<= )
top--;
a[++top]=a[i];
}
n=top;
}
}P;
int T,n,g,r,x[N][N],f[N][N];
bool check(int x,int y)
{
if(x%n+==y || y%n+==x)
return false;
double dis=(P.a[x]-P.a[y]).length();
for(int i=;i<=g;i++)
{
double cha=abs((P.a[y]-P.a[x])*(b[i]-P.a[x]));
if(cha+eps<=1.0*r*dis)return false;
}
return true;
}
void init()
{
int ans=;
memset(f,,sizeof(f));
scanf("%d%d%d",&n,&g,&r);
P.n=n;
for(int i=;i<=n;i++)
P.a[i].read();
for(int i=;i<=g;i++)
b[i].read();
P.ChangetoConvex();
n=P.n;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
x[i][j]=x[j][i]=check(i,j);
for(int d=;d<=n-;d++)
for(int i=;i<=n;i++)
{
int nxt=(i+d-)%n+,res=;
res=max(f[i][d-],f[i%n+][d-]);
f[i][d]=x[i][nxt]+res;
ans=max(ans,f[i][d]);
}
printf("%d\n",ans);
}
int main()
{
scanf("%d",&T);
while(T--)init();
}
[2019HDU多校第三场][HDU 6603][A. Azshara's deep sea]的更多相关文章
- [2019HDU多校第五场][HDU 6626][C. geometric problem]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6626 题目大意:给出平面上六个点\(A,B,M,N,X,Y\)以及两条直线\(L1,L2\),要求在四 ...
- [2019HDU多校第四场][HDU 6617][D. Enveloping Convex]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6617 题目大意:给出一凸包\(P\),求最小的与\(P\)相似且对应边平行的多边形,使得题目给出的\( ...
- 2019Hdu多校第三场:1007 Find the answer(multiset 解法)
原题链接: Find the answer c++中,multiset是库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数 ...
- 2019HDU多校第三场F Fansblog——威尔逊定理&&素数密度
题意 给定一个整数 $P$($10^9 \leq p\leq 1^{14}$),设其前一个质数为 $Q$,求 $Q! \ \% P$. 分析 暴力...说不定好的板子能过. 根据威尔逊定理,如果 $ ...
- 2019HDU多校第三场 K subsequence——最小费用最大流
题意 给定一个 $n$ 个整数的数列,从中至多选取 $k$ 个上升子序列(一个元素最多被选一次),使得选取的元素和最大. 分析 考虑这个问题和经典网络流问题“最长不下降子序列”相似,我们考虑对这个建图 ...
- 2019HDU多校第三场 Distribution of books 二分 + DP
题意:给你一个序列,你可以选择序列的一个前缀,把前缀分成k个连续的部分,要求这k个部分的区间和的最大值尽量的小,问这个最小的最大值是多少? 思路:首先看到最大值的最小值,容易想到二分.对于每个二分值m ...
- [hdu contest 2019-07-29] Azshara's deep sea 计算几何 动态规划 区间dp 凸包 graham扫描法
今天hdu的比赛的第一题,凸包+区间dp. 给出n个点m个圆,n<400,m<100,要求找出凸包然后给凸包上的点连线,连线的两个点不能(在凸包上)相邻,连线不能与圆相交或相切,连线不能相 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 牛客多校第三场 F Planting Trees
牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...
随机推荐
- Python 实现把两个排好序的的列表合并成一个排序列表
列表是升序的 # -*- coding: utf-8 -*- # 合并两个排序的数组 def merge_list(a, b): if not a: return b if not b: return ...
- 2019CCPC网络赛——array(权值线段树)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6703 题目大意: 给出一个n(n<1e5)个元素的数组A,A中所有元素都是不重复的[1,n]. 有 ...
- Oracle数据库——用户(USER)
前言 本文将介绍小白入门级别的关于用户的SQL语句.想全面了解的请参考其他资料.例如:Oracle官方文档--CREATE USER 文章目录 前言 创建用户 修改用户密码 授予用户权限 删除用户 ...
- oj上的测试点信息
Accepted 通过!(AC) Wrong Answer 答案错.(WA) Runtime Error ...
- IDEA GIT 忽略文件 最佳方式
前言 转载一篇博客,简单,实用. 原文地址:intellij idea 忽略文件不提交 ps:下面均为转载博客的内容: 在intellij中忽略提交文件,分两种情况, 文件没有纳入版本管理 第一种,文 ...
- ml
基础篇: 1. 读书<Introduction to Data Mining>,这本书很浅显易懂,没有复杂高深的公式,很合适入门的人.另外可以用这本书做参考<Data Mining ...
- ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)
使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- phpstorm+xdebug+mvc
前一段时间自己琢磨出来,今天又给忘了,还去t00ls发帖.... 写到这里备忘 拿这个yxcms举例子 版本: yxcms1.2.1 源码:http://pan.baidu.com/s/1pJM1CP ...
- 苹果发布app,上传ipa,不显示问题
用Xcode或者leader上传ipa,提示是上传成功,但是在网页上不显示构建版本.如下图: 那么,你先点击“活动”,进去后,如果显示你的app正在审核,那么表示上传成功,等待:如果“活动”中不显示你 ...