Gym101128J

Gym101128J


二分判断点是否在凸包内,模板更新

//Gym - 101128J
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
const double eps = 1e-8;
const double inf = 1e20;
const double pi = acos(-1.0);
const int maxp = 10110;
using namespace std;
int sgn(double x) {if(fabs(x) < eps) return 0;if(x < 0) return -1;else return 1;
}
struct Point {double x,y;Point(){}Point(double _x,double _y){x=_x;y=_y;}void input() {scanf("%lf%lf",&x,&y);}bool operator == (Point b) const{return sgn(x-b.x) == 0 && sgn(y-b.y) == 0;}bool operator < (Point b) const{return sgn(x-b.x)==0?sgn(y-b.y)<0:x<b.x;}Point operator - (const Point &b) const {return Point(x-b.x,y-b.y);}double operator ^ (const Point &b) const {return x*b.y - y*b.x;}double operator * (const Point &b) const {return x*b.x + y*b.y;}Point operator * (const double &k) const {return Point(x*k,y*k);}Point operator / (const double &k) const {return Point(x/k,y/k);}Point operator + (const Point &b) const {return Point(x+b.x,y+b.y);}double len() {return hypot(x,y);}double len2() {return x*x+y*y;}double distance(Point p) {return hypot(x-p.x,y-p.y);}
};
struct Line {Point s,e;Line(){}Line(Point _s,Point _e){s=_s;e=_e;}double length(){return s.distance(e);}double dispointtoline(Point p) {return fabs((p-s)^(e-s))/length();}Point lineprog(Point p) {return s + ( ((e-s)*((e-s)*(p-s)))/(e-s).len2() );}int pointseg(Point p) { // update: 点在线段上return sgn((p-s)^(e-s)) == 0 && min(s.x,e.x) <= p.x && p.x <= max(s.x,e.x) && min(s.y,e.y) <= p.y && p.y <= max(s.y,e.y);}
};struct polygon {int n;Point p[maxp];void input(int _n) {n = _n;rep(i,0,n-1) p[i].input();}struct cmp{Point p;cmp(const Point &p0){p=p0;}bool operator ()(const Point &aa,const Point &bb) {Point a = aa, b = bb;int d = sgn((a-p)^(b-p));if(d == 0) {return sgn(a.distance(p)-b.distance(p)) < 0;}return d > 0;}};void norm() {Point mi = p[0];for(int i=1;i<n;++i) mi = min(mi,p[i]);sort(p,p+n,cmp(mi));}void Graham(polygon &convex) {norm();int &top = convex.n;top = 0;if(n == 1) {top = 1;convex.p[0] = p[0];return;}if(n == 2) {top = 2;convex.p[0] = p[0];convex.p[1] = p[1];if(convex.p[0] == convex.p[1]) --top;return;}convex.p[0] = p[0];convex.p[1] = p[1];top = 2;rep(i,2,n-1) {while(top > 1 && sgn((convex.p[top-1]-convex.p[top-2])^(p[i]-convex.p[top-2])) <= 0)--top;convex.p[top++] = p[i];}if(convex.n == 2 && (convex.p[0]==convex.p[1]))convex.n--;}double getarea() {double sum = 0;rep(i,0,n-1)sum += (p[i]^p[(i+1)%n]);return fabs(sum)*0.5;}int inconvex(Point s) { //update: 逆时针凸包 边界返回2, 内部返回1,外部返回0Point p0 = p[0];Line l1(p0,p[1]),l2(p0,p[n-1]);if(l1.pointseg(s) || l2.pointseg(s)) return 2;int l = 1, r = n - 2;while(l <= r) {int mid = (l+r)/2;int t1 = sgn((s-p0)^(p[mid]-p0));int t2 = sgn((s-p0)^(p[mid+1]-p0));if( t1 <= 0 && t2>=0 ) {int t3 = sgn((s-p[mid])^(p[mid+1]-p[mid]));if(t3 < 0) return 1; // 在内部else if(t3 == 0) return 2; //在边上return 0;}if(t1 > 0) r = mid-1;else l = mid+1;}return 0;}
};int n,q,ans;
polygon P,T;
int main() {scanf("%d",&n);P.input(n);P.Graham(T);scanf("%d",&q);while(q--) {Point s;s.input();ans += !!(T.inconvex(s));}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9391600.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发日志——WCF Client

WCF作为.NET Framework3.0就被引入的用于构建面向服务的框架在众多项目中发挥着重大作用。时至今日&#xff0c;虽然已有更新的技术可以替代它&#xff0c;但对于那些既存项目或产品&#xff0c;使用新框架重构的代价未必能找到人愿意买单。而在.NET Core平台环境中&#xff0c…

jzoj4279-[NOIP2015模拟10.29B组]树上路径【树形dp】

正题 题目链接:https://gmoj.net/senior/#main/show/4279 题目大意 nnn个点的一棵树求经过每个点的最长路径。 解题思路 设fif_{i}fi​表示iii子树内的最长路径。 我们第二次转移一个位置时我们枚举除了这个子树之外的其他子树&#xff0c;找到之外最大的fif_ifi​转移下去即…

纪中培训总结(2019年9月4~13日)

Day0&#xff08;4号&#xff09; 今天来到纪中&#xff0c;收拾了一下行李&#xff0c;然后来到机房&#xff0c;老师讲了一下规则&#xff0c;然后刷题去了 Day1&#xff08;5号&#xff09; 早上起来去吃了个早餐&#xff0c;喝了瓶奶&#xff0c;然后来到机房&#xff0…

jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】

正题 题目大意 构造一个ai{1,−1}a_i\{1,-1\}ai​{1,−1}使得最小化∣∑i1naii2∣|\sum_{i1}^na_ii^2|∣i1∑n​ai​i2∣ 解题思路 我们发现有对于一段连续的x2−(x1)2−(x2)2(x3)24x^2-(x1)^2-(x2)^2(x3)^24x2−(x1)2−(x2)2(x3)24&#xff0c;那么就有x2−(x1)2−(x2)2(x3)…

POJ3335(半平面交)

POJ3335 半平面交裸题 //poj3335 #include <cstdio> #include <cmath> #include <algorithm> #define rep(i,a,b) for(int ia;i<b;i) const double eps 1e-8; const double inf 1e20; const double pi acos(-1.0); const int maxp 50110;using namesp…

通过 Docker Compose 组合 ASP NET Core 和 SQL Server

本文模拟一个比较完整的项目&#xff0c;包括前端(MVC), 后端(WebApi)和数据库(mssql-server-linux)。通过Docker Compose 定义&#xff0c;组合并执行它们。涉及到 Docker Compose 安装&#xff0c;命令&#xff0c;docker-compose.yml文件编写&#xff0c;WebApi 和 MVC 项目…

【模拟】交换(jzoj 1518)

交换 jzoj 1518 题目大意&#xff1a; 有两个字符串&#xff08;只包含‘R’‘G’‘B’三个字符&#xff0c;且相邻的字符互不相同&#xff09;&#xff0c;现在要交换两个字符串中的一个数&#xff0c;使两个字符串内都各有3个连续且相同的字符&#xff0c;问有多少种换法 …

组合博弈学习笔记

组合博弈学习笔记 说在前边 下面的博弈题目基本就是sg函数&#xff0c;搜必败必胜态&#xff0c;找规律&#xff0c;推策略。。。没有对理论进行深入了解。HDU1527 搜索时发现&#xff0c;必败态的数对貌似有规律&#xff0c;首先他们的大小两个数的差值是逐个增加的。然后&…

winserver的consul部署实践与.net core客户端使用(附demo源码)

前言随着微服务兴起&#xff0c;服务的管理显得极其重要。都知道微服务就是”拆“&#xff0c;把臃肿的单块应用&#xff0c;拆分成多个轻量级的服务&#xff0c;每个服务可以在短周期内重构、迭代、交付。随着微服务的数量增多&#xff0c;因量变引起了质量&#xff0c;带来新…

P5075-[JSOI2012]分零食【dp,生成函数,FFT】

正题 题目链接:https://www.luogu.com.cn/problem/P5075 题目大意 mmm个糖分给AAA个小朋友&#xff0c;得到xxx个糖的小朋友可以贡献F(x)Ox2SxUF(x)Ox^2SxUF(x)Ox2SxU的贡献值。要求没有得到糖的小朋友一定是后面一段连续的序列&#xff0c;求所有方案的贡献值乘积之和。 解题…

【模拟】【递归】解压字符串(jzoj 1519)

解压字符串 jzoj 1519 题目大意&#xff1a; 有一串压缩过的字符串&#xff0c;将有重复的压缩成了s(~~)的形式&#xff08;s是一位数&#xff0c;例子&#xff1a;123123123压缩成‘3&#xff08;123&#xff09;’&#xff09;&#xff0c;现在要你解压出来&#xff0c;然…

Educational Codeforces Round 48

Educational Codeforces Round 48 C.Vasya And The Mushrooms 思路很简单&#xff0c;走法有一个统一形式就是先上下走&#xff0c;然后到某个位置左右一个来回。然后就推一下&#xff0c;后边那段的递推式子&#xff0c;枚举改变走法的位置即可。看出做法之后发现要推个式子&a…

微软发布Azure Service Fabric Mesh公开预览版

Service Fabric现在在云端有了一个新亲戚——Azure Service Fabric Mesh&#xff0c;Azure的一个完全托管服务&#xff0c;开发人员现在可以基于此服务部署和运行容器化应用程序。在去年五月的Build 2018大会期间首次亮相后&#xff0c;现在开始进行公开预览。在Build 2018大会…

【DP】楼梯(jzoj 1520)

楼梯 jzoj 1520 题目大意&#xff1a; 有n个楼梯&#xff0c;跳跃高度初始值是1&#xff0c;当往后一层时&#xff0c;跳跃高度就2&#xff0c;当跳跃只能跳跃到当前能跳到楼梯&#xff0c;且跳跃之后&#xff0c;跳跃高度变回1&#xff0c;问跳到第n层最少花几步 样例输入…

P5502-[JSOI2015]最大公约数【分治】

正题 题目链接:https://www.luogu.com.cn/problem/P5502 题目大意 nnn个数&#xff0c;求一个L,RL,RL,R使得最大化(R−L1)∗gcd(aL,aL1,aL1...aR−1,aR)(R-L1)*gcd(a_L,a_{L1},a_{L1}...a_{R-1},a_R)(R−L1)∗gcd(aL​,aL1​,aL1​...aR−1​,aR​) 解题思路 考虑分治&#x…

牛客网暑期ACM多校训练营(第五场)

牛客网暑期ACM多校训练营&#xff08;第五场&#xff09; A. gpa 二分答案&#xff0c;然后就转化为是否满足\(\frac {\sum s[i]c[i]}{\sum s[i]} ≥ D\), \(\sum s[i]c[i] ≥ \sum s[i]D\), \(\sum s[i](c[i]-D) ≥ 0\) 显然科目越少gpa越高&#xff0c;于是去掉最小的k个判断…

.NET Core TDD前传: 编写易于测试的代码 -- 缝

有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试....举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处它可以尽早发现…

【数位DP】好数(jzoj 1521)

好数 jzoj 1521 题目大意&#xff1a; 定义好数为转换为二进制后&#xff0c;有至少三个连续的位相同的数&#xff0c;现在要求一个范围内的好数个数 样例输入 0 16样例输出 5数据范围限制 0 < Low < UP < 2147483647 提示 提示&#xff1a; 对于50%测试&…

P4294-[WC2008]游览计划【斯坦纳树】

正题 题目链接:https://www.luogu.com.cn/problem/P4294 题目大意 n∗mn*mn∗m的网格&#xff0c;每个格子的修建费用不同&#xff0c;要求修建费用最小连接所有关键点。 解题思路 设fs,i,jf_{s,i,j}fs,i,j​表示目前连接关键点状态为sss&#xff0c;在(i,j)(i,j)(i,j)这个位…

「LibreOJ NOIP Round #1」旅游路线

「LibreOJ NOIP Round #1」旅游路线 题目链接 做法&#xff1a; 首先肯定要预处理些东西&#xff0c;来使单词询问达到\(o(logn)\)或者\(o(1)\)的复杂度&#xff0c;又因为距离这个东西的范围太大&#xff0c;我们考虑预处理一些费用相关的东西。考虑\(dp[s][j]\)表示从s出发花…