bzoj4814: [Cqoi2017]小Q的草稿
Description
Input
Output
对每个点以它为中心进行扫描线,处理在右方的点和三角形。
#include<bits/stdc++.h>
typedef long long i64;
typedef double ld;
int n,m;
int sgn(i64 x){return x<?-:x>;}
struct pos{
int x,y;
void R(){scanf("%d%d",&x,&y);}
i64 pw2(){return i64(x)*x+i64(y)*y;}
}ps[],ws[],trs[][],O=(pos){,},now;
pos operator-(const pos&a,const pos&b){return (pos){a.x-b.x,a.y-b.y};}
int operator*(const pos&a,const pos&b){return sgn(i64(a.x)*b.y-i64(a.y)*b.x);}
ld mul(const pos&a,const pos&b){return ld(a.x)*b.y-ld(a.y)*b.x;}
bool cmp(const pos&a,const pos&b){return a.x!=b.x?a.x<b.x:a.y<b.y;}
bool operator<(const pos&a,const pos&b){return a*b<;}
struct seg{
pos a[];
ld val()const{return mul(a[],a[])/mul(now,a[]-a[]);}
bool operator<(const seg&w)const{return val()<w.val();}
};
std::set<seg>st;
std::set<seg>::iterator its[];
struct Q{
pos a[];
int t,id;
bool operator<(const Q&w)const{
int x=a[t]*w.a[w.t];
return x?x<:t<w.t;
}
bool operator<(const pos&w){
int x=a[t]*w;
return x?x<:!t;
}
void cal(){
now=a[t];
if(cmp(now,O))now=(pos){,};
if(t)st.erase(its[id]);
else{
seg s=(seg){a[],a[]};
its[id]=st.insert(s).first;
}
}
}qs[];
bool cross(pos a,pos b1,pos b2){
pos ba=b2-a;
if((a*(b1-a))*(a*ba)>)return ;
pos b3=b1-b2;
return (b3*b2)*(b3*ba)<=;
}
int ans=,wp,qp,ip;
void scl(){
for(int i=,j=;i<wp;++i){
for(;j<qp&&qs[j]<ws[i];qs[j++].cal());
if(st.empty()||!cross(ws[i],st.begin()->a[],st.begin()->a[]))++ans;
}
}
void aq(pos a,pos b){
bool da=cmp(O,a),db=cmp(O,b);
++ip;
if(da)qs[qp++]=(Q){a,b,,ip};
else if(db)((Q){a,b,,ip}).cal();
if(db)qs[qp++]=(Q){a,b,,ip};
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)ps[i].R();
std::sort(ps+,ps+n+,cmp);
for(int i=;i<=m;++i)for(int j=;j<;++j)trs[i][j].R();
for(int i=;i<=n;++i){
st.clear();
wp=,qp=,ip=;
for(int j=i+;j<=n;++j)ws[wp++]=ps[j]-ps[i];
std::sort(ws,ws+wp);
for(int j=;j<=m;++j){
pos tr[];
for(int t=;t<;++t)tr[t]=trs[j][t]-ps[i];
std::sort(tr,tr+);
aq(tr[],tr[]);
}
std::sort(qs,qs+qp);
scl();
}
printf("%d\n",ans);
return ;
}
bzoj4814: [Cqoi2017]小Q的草稿的更多相关文章
- BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)
题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...
- bzoj 4814: [Cqoi2017]小Q的草稿【计算几何】
//先打个50暴力,10min50分简直美滋滋~ #include<iostream> #include<cstdio> #include<algorithm> u ...
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- bzoj 4815: [Cqoi2017]小Q的表格 [数论]
4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...
- BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs
BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格 ...
- 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)
[BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...
- 洛咕 P3700 [CQOI2017]小Q的表格
洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...
- [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)
4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 804 Solved: 441[Submit][Statu ...
随机推荐
- 2017java文本文件操作(读写操作)
java的读写操作是学java开发的必经之路,下面就来总结下java的读写操作. 从上图可以开出,java的读写操作(输入输出)可以用“流”这个概念来表示,总体而言,java的读写操作又分为两种:字符 ...
- 常用cursor光标说明
1.cursor语法: cursor : auto | crosshair | default | hand | move | help | wait | text | w-resize |s-res ...
- Prism for WPF
Prism for WPF Prism for WPF初探(构建简单的模块化开发框架) 先简单的介绍一下Prism框架,引用微软官方的解释: Prism provides guidance to ...
- this语句的知识点第五点
对不起大家久等了 最后一点 第五点 给元素中的某一个事件绑定方法,当事件触发时,执行绑定的方法,方法中的this指向当前元素. funciton fn(){ console.log(this) } d ...
- WEBapi在IIS发布注意事项-发布错误
发布报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 解决方法: 1)打开IIS管理器 2)找到功能视图的目录浏览 3)双击进入后,点击右侧操作栏-启用
- Extend a root LVM partition online
There is also a quick remedy for the emergency situation when your root partition runs out of disk s ...
- 更改MySQL数据库的编码为utf8mb4
原文:http://blog.csdn.net/woslx/article/details/49685111 utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3 ...
- struts2 中的数据访问servletAPI
ActionContext包含其他数据对象,包括值栈 每次请求都会创建一个ActionContext对象 通过ActionContext访问数据 在action中读取 在jsp页面中读取 1 ...
- 关闭MongoDB服务的几种方法
MongoDB 提供几种关闭服务的命令,具体为以下: 一 使用 Crtl+C 关闭 [mongo@redhatB data]$ mongod --dbpath=/database/mongodb/da ...
- this关键字的使用8/22
实质就是:this代表当前对象目录: 1.this(name) 调用同一个类中参数为 public Person(String name)这个构造方法 2.this.say() 同一个类中,某一个方法 ...