听了遍dls的讲解觉得这是个沙比题,结果调了两个小时。。。

主要注意的点有两个,

一个是 找每个灯覆盖的区间,这个用叉积看一下夹角即可

一个是 覆盖的时候点覆盖比边覆盖好写(个人感觉)

点覆盖的话,如果当前光源能照到[l,r]的点,那下一次直接找<=r的就可以了,最后判断覆盖n个点

边的话,如果是[l,r]的边,那么下一次就要找<=r+1的,最后判断覆盖n-1条边。

 #include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
typedef double db;
const int N = ;
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};}
int operator == (const point &k1) const{return cmp(x,k1.x)==&&cmp(y,k1.y)==;}
};
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.y-k1.y+k2.x;}
int t,n,m;
point p[N],s[N];
struct O{
int s,t,inx;
bool operator <(const O &o)const{
if(s==o.s)return t>o.t;
else return s<o.s;
}
};
vector<O>v;
vector<int> ans,tmp;
void slove(){
for(int l=;l<v.size();l++){
tmp.clear();
int cur=l;
tmp.push_back(v[cur].inx);
while (v[cur].t<v[l].s+n){
int mx = v[cur].t;
for(int r=l+;r<v.size()&&v[r].s<=mx;r++){
if(v[r].t>v[cur].t) cur=r;
}
if(v[cur].t==mx)break;
tmp.push_back(v[cur].inx);
}
if(v[cur].t>=v[l].s+n&&(ans.empty()||tmp.size()<ans.size()))
ans=tmp;
}
}
int main(){
scanf("%d",&t);
while(t--){
v.clear();ans.clear();
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){//
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i+n]=p[i];
}
for(int i=;i<m;i++){
scanf("%lf%lf",&s[i].x,&s[i].y);
}
for(int i=;i<m;i++){
int l=,r;
for(int j=;j<n;j++){
if(cross(p[j+]-p[j],p[j]-s[i])>&&cross(p[j]-p[j-+n],p[j-+n]-s[i])<=)
l=j;
}
r=l;
while (r<=l+n){
if(cross(p[r+]-p[r],p[r]-s[i])>)r++;
else break;
}
v.push_back({l,r,i+});//点覆盖
//if(r+n<2*n)v.push_back({l+n,r+n,i+1});
}
sort(v.begin(),v.end());
slove();
if(ans.empty())
printf("-1\n");
else {
printf("%d\n", ans.size());
for (int i = ; i < ans.size(); i++) {
printf("%d%c", ans[i], i == ans.size() - ? '\n' : ' ');
}
}
}
}
/**
1
3 1
0 0
1 0
0 1
-1 -1
*/

18 徐州 M的更多相关文章

  1. 徐州网络赛C-Cacti Lottery【DFS】

    54.19% 2000ms 262144K Morgana is playing a game called cacti lottery. In this game, morgana has a 3 ...

  2. 18年ACM赛后总结

    今天,我们浙理养老队在18年赛季的比赛正式宣布结束了,先恭喜我们队在3场区域赛中拿了两块金牌,一块银牌,损失我的身份证我的U盘我的耳机,老天啊,队友不是拿来顶替自己的霉运的嘛,让他们的丢东西啊,别让我 ...

  3. 2019ICPC徐州自我反省及未来打算

    徐州站结束了有好几天了,然而为了热爱的网络课(qdu-zpj网络课你值得信赖),一直没时间写个博客,今天又来说点心里话 今年的ICPC,就这样都打完了,可惜最终也是没能拿金,不过拿到了块银,也算保底吧 ...

  4. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  5. ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据

    系列目录 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流程,免得大家后天雾里来雾里去首先我再解释一些表,SysUser和SysRole表不用解释了. SysRoleSys ...

  7. C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

    在上篇随笔<C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理>介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理.成员管理.标签管理三个部分,本篇主要介绍成员的管 ...

  8. [MySQL Reference Manual] 18 复制

    18 复制 18 复制 18.1 复制配置 18.1.1 基于Binary Log的数据库复制配置 18.1.2 配置基于Binary log的复制 18.1.2.1 设置复制master的配置 18 ...

  9. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

随机推荐

  1. SQL Server数据库读写分离提高并发性

    在一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡.遗憾的是,SQL Server 的所有版 ...

  2. Linux 下软件的安装方法

    1:rpm 安装 ,rpm安装会有依赖问题,例如安装A,提示需要安装B 安装B需要安装C 格式: rpm -ivh [包名].rpm 2:yum 安装  特点:简单.易用.高校  缺点:不能定制 解决 ...

  3. C# 执行oracle sql 语句出现中文不兼容的问题

    最近我用C#调用 操作oracle 数据库 出现了一个问题就是 我的查询语中的条件语句 含有中文 字符在C#中查询不了 ,但是在pl sql  中能够正常的查询出来. 这个原因是 C# 执行orccl ...

  4. 新加坡100M带宽,国内延迟70ms,仅800元

    ▇ 新加坡100M带宽,延迟80msE3_8G_1TB_100M_5IP_800元促:E3_32G_1TB SSD_1200元 ▇ 马来西亚,独享带宽,延迟70msL5630_16G_1TB_15M_ ...

  5. L1-Day3

    L1-Day31.太阳从西边落下. [我的翻译]The sun falls in the west. [标准答案]The sun sets in the west. [对比分析]落下fall与set的 ...

  6. linux中epoll模型

    epoll是linux内核为处理大批量文件描述符而作了改进的poll,是linux下IO复用select/poll的增强版本. 一.epoll的主要接口是: 1.创建 (1)int epoll_cre ...

  7. MS SQL Server NULL处理

    -- 首先在用户表中插入数据如下 TRUNCATE TABLE UserInfo ; INSERT INTO userinfo(UserName,UserLogin,UserPassword,User ...

  8. 基于BootStrap的initupload()实现Excel上传和获取excel中的数据

    简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...

  9. 【python】随机数用法

    全文拷贝自:Python随机数用法 random.seed(int) 给随机数对象一个种子值,用于产生随机序列. 对于同一个种子值的输入,之后产生的随机数序列也一样. 通常是把时间秒数等变化值作为种子 ...

  10. 期货大赛项目|六,iCheck漂亮的复选框

    废话不多说,直接上图 对,还是上篇文章的图,这次我们不研究datatables,而是看这个复选框,比平常的复选框漂亮太多 看看我是如何实现的吧 插件叫iCheck 用法也简单 引入js和css $(& ...