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 ...
随机推荐
- 20155208徐子涵 2016-2017-2 《Java程序设计》第9周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 撰写应用程序是利用通信协议对数据库进行指 ...
- websocket介绍 以及 vue websocket使用案例
1 介绍: https://www.zhihu.com/question/20215561 2 案例: https://www.jianshu.com/p/0d20a032d0ec (坑说明). ht ...
- NetCore平台下使用RPC框架Hprose
NetCore下使用RPC框架Hprose https://www.jianshu.com/p/c903fca44d5d Hprose是国内非常优秀的RPC框架,和其它RPC框架比较起来,其它框架一般 ...
- 《DSP using MATLAB》Problem 6.10
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- java gaoji 算法
import java.util.Scanner; public class Main{ public static int[] Test(int[] a){ int [] ...
- day 04 Java并发多线程
http://www.cnblogs.com/hellocsl/p/3969768.html?utm_source=tuicool&utm_medium=referralPS:而JVM 每遇到 ...
- mysql存储程序
什么时候会用到存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度2.当对数据库进行复杂操作时 ...
- day 30 1.操作系统原理 2. Process 模块学习
进程: 起源:进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的.所以想要真正了解进程,必须事先了解操作 ...
- yaml,json,ini这三种格式用来做配置文件优缺点
适合人类编写:ini > toml > yaml > json > xml > plist可以存储的数据复杂度:xml > yaml > toml ~ jso ...
- ElasticSearch(三)不仅仅是查询
二次评分 查询出来结果后,进行二次评分: 但是其实每个文档查询出来的结果是两次查询的分数之和,这个其实并不是很能讲的清楚: 多匹配控制 多匹配是指multi-match,控制则是指一下的几种控制方式: ...