bzoj2856: [ceoi2012]Printed Circuit Board
Description
Input
Output
#include<bits/stdc++.h>
typedef long long i64;
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a>b?a:b;}
const int N=;
char buf[],*ptr=buf;
int _(){
int x=;
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
return x;
}
struct pos{
double x,y;
double val()const{return x+y;}
}xs[N];
double operator*(pos a,pos b){return a.x*b.y-a.y*b.x;}
pos operator-(pos a,pos b){return (pos){a.x-b.x,a.y-b.y};}
int n;
struct vertex{
pos p;
int id,x;
bool operator<(vertex w)const{
double d=p*w.p;
return d?d<:p.val()<w.p.val();
}
}vs[N];
int ps[N],xp=;
bool un[N];
struct itv{
pos a,b;
int l,r;
double operator()(pos&w)const{
return w.val()*(b*a)/(w*(a-b));
}
}is[];
int mx;
void ins(itv&a,itv&b){
if(!a.r)a=b;
else{
int l=max(a.l,b.l),r=min(a.r,b.r);
if(a(xs[l])+a(xs[r])>b(xs[l])+b(xs[r]))a=b;
}
}
void ins(vertex a,vertex b){
itv w=(itv){a.p,b.p,a.x,b.x};
for(int l=a.x+mx-,r=b.x+mx+;r-l!=;l>>=,r>>=){
if(~l&)ins(is[l^],w);
if(r&)ins(is[r^],w);
}
}
int as[N],ap=;
int main(){
fread(buf,,sizeof(buf),stdin);
n=_();
for(mx=;mx<=n+;mx<<=);
for(int i=;i<=n;++i){
vs[i].p.x=_();
vs[i].p.y=_();
vs[i].id=i;
}
std::sort(vs+,vs+n+);
for(int i=,j=;i<=n;i=j){
for(++j;j<=n&&vs[i].p*vs[j].p==;un[vs[j].id]=,++j);
xs[++xp]=vs[i].p;
for(int k=i;k<j;++k)vs[k].x=xp;
}
for(int i=;i<=n;++i)ps[vs[i].id]=i;
ps[]=ps[n];
for(int i=;i<=n;++i){
int a=ps[i-],b=ps[i];
if(a>b)std::swap(a,b);
if(vs[a].x<vs[b].x)ins(vs[a],vs[b]);
}
for(int i=;i<=n;++i)if(!un[vs[i].id]){
for(int w=vs[i].x+mx;w;w>>=)if(is[w].r&&is[w](vs[i].p)<vs[i].p.val()-1e-){
un[vs[i].id]=;
break;
}
}
for(int i=;i<=n;++i)if(!un[i])as[ap++]=i;
printf("%d\n",ap);
for(int i=;i<ap;++i)printf("%d ",as[i]);
return ;
}
bzoj2856: [ceoi2012]Printed Circuit Board的更多相关文章
- Printed Circuit Board (board)
Printed Circuit Board (board) 题目描述 给出一个N个顶点的简单多边形,对于每个顶点,假如它和原点连成的线段只在这个顶点处和多边形相交,就称为满足要求的顶点.你的任务是输出 ...
- ZOJ1648 Circuit Board 2017-04-18 20:31 34人阅读 评论(0) 收藏
Circuit Board Time Limit: 2 Seconds Memory Limit: 65536 KB On the circuit board, there are lots ...
- ZOJ 1648 Circuit Board(计算几何)
Circuit Board Time Limit: 2 Seconds Memory Limit: 65536 KB On the circuit board, there are lots of c ...
- ZOJ1648 Circuit Board(线段相交)
裸的判断线段相交
- kickstart2019 round_C B. Circuit Board
思路: 这题应该不止一种解法,其中的一种可以看作是leetcode85https://www.cnblogs.com/wangyiming/p/11059176.html的加强版: 首先对于每一行,分 ...
- zoj 1648 Circuit Board
题目:意思就是推断给定的几条线段是否有相交的. 方法:模版吧,有空在来细细学习. 代码: #include <iostream> #include <cstdio> using ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- COB(Chip On Board) 工艺技术
COX(Chip On X) •X 基板: PCB (Printed circuit board) FPC (Flexible Printed Circuit) Glass •导线焊接 球形焊接 ...
- 特邀美国EMC实战专家Mark来华授课
“轻松搞定EMC-PCB和系统设计”课程介绍 本次课程特邀美国EMC领域权威专家Mark Montrose主讲,将涵盖满足产品电磁兼容性和信号完整性的基本原理.课程涉及多个领域,不仅仅针对PCB设计, ...
随机推荐
- 在django中进行MySQL入库
在django中进行mysql 入库 需要导入 : from django.db import models 在添加主键时,需要使用: primary_key=True id = models. ...
- 给Linux服务器设置共享文件目录
通过samba软件 :yum install samba 修改配置文件:vi /etc/samba/smb.conf 添加 [WORKSPACE] comment = workspace ...
- Kafka设计解析:Kafka High Availability
Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务.若该Broker永远不能再恢复,亦 ...
- random(随机模块)
程序中有很多地方需要用到随机字符,比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串 >>> random.randrange(1,10) #返回1-10之间的一 ...
- da shu mo ban
#include<bits/stdc++.h> using namespace std; ;/*精度位数,自行调整*/ //1.如果需要控制输出位数的话,在str()里面把len调成需要的 ...
- Cassandra--设置数据保留时间
在Cassandra中,可以设置列的保留时间(Time To Live),当该列超过保留时间后,会下一次读取中被墓碑(Tombstone)标记,然后保留一个垃圾回收周期(表属性gc_grace_sec ...
- awesome-workflow-engines
转自:https://github.com/meirwah/awesome-workflow-engines awesome-workflow-engines A curated list of aw ...
- 05机器学习实战之Logistic 回归scikit-learn实现
https://blog.csdn.net/zengxiantao1994/article/details/72787849似然函数 原理:极大似然估计是建立在极大似然原理的基础上的一个统计方法,是概 ...
- ESB雏形 -- 项目企业服务总线初始
今天要厚着脸皮给大家推荐一个自己做的通信中间件——ServiceAnt,目前已经在我们团队的两个产品线上投入了使用. ServiceAnt是什么 它最初的定位是ESB(企业服务总线),但目前还没有达到 ...
- 20165308 2017-2018-2 《Java程序设计》第四周学习总结
20165308 2017-2018-2 <Java程序设计>第四周学习总结 知识点 第五章 1.子类声明中通常用关键字extend来定义一个子类. 2.子类和父类在同一包中的继承性,继承 ...