CodeChef February Challenge 2018 Points Inside A Polygon (鸽笼原理)
题意 给定一个$n$个点的凸多边形,求出$[ \frac{n}{10}]\ $个凸多边形内的整点。
把$n$个点分成$4$类:
- 横坐标奇,纵坐标奇
- 横坐标奇,纵坐标偶
- 横坐标偶,纵坐标奇
- 横坐标偶,纵坐标偶
根据鸽笼原理,这$4$类点中至少有一类点数目不小于$[ \frac{n}{4}]\ $
每一个类别中,每两个点的中点肯定为整点,并且当这两个点不在凸多边形上相邻的时候,
他们一定在凸多边形内。
那么把这$4$个类别里面的点分别处理就可以了。
(事实证明只选最多的那个类别其实就可以通过)
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL;
typedef pair <int, int> PII; const int N = 1e5 + 10; int T;
int n;
int x[N], y[N];
int p, q;
int cnt;
vector <int> a[2][2];
vector <PII> ans;
map <PII, int> mp; int main(){ scanf("%d", &T);
while (T--){
scanf("%d", &n);
ans.clear();
mp.clear();
rep(i, 0, 1) rep(j, 0, 1) a[i][j].clear();
rep(i, 1, n){
scanf("%d%d", x + i, y + i);
a[abs(x[i]) & 1][abs(y[i]) & 1].push_back(i);
} p = 0, q = 0;
rep(i, 0, 1) rep(j, 0, 1){
if (a[i][j].size() > a[p][q].size()){
p = i;
q = j;
}
} cnt = n / 10;
rep(i, 0, a[p][q].size() - 2){
rep(j, i + 1, a[p][q].size() - 1){
int l = a[p][q][i], r = a[p][q][j];
if ((l + 1 == r) || (l == 1 && r == n)) continue;
int nx = (x[l] + x[r]) >> 1;
int ny = (y[l] + y[r]) >> 1;
if (!mp.count(MP(nx, ny))){
ans.push_back(MP(nx, ny));
mp[MP(nx, ny)] = 1;
--cnt;
}
if (cnt == 0) break;
}
if (cnt == 0) break;
} for (auto u : ans) printf("%d %d\n", u.fi, u.se);
} return 0;
}
CodeChef February Challenge 2018 Points Inside A Polygon (鸽笼原理)的更多相关文章
- codechef February Challenge 2018 简要题解
比赛链接:https://www.codechef.com/FEB18,题面和提交记录是公开的,这里就不再贴了 Chef And His Characters 模拟题 Chef And The Pat ...
- CodeChef February Challenge 2018 Broken Clock (三角函数推导 + 矩阵快速幂)
题目链接 Broken Clock 中文题面链接 令$cos(xα) = f(x)$ 根据三角函数变换公式有 $f(x) = \frac{2d}{l} f(x-1) - f(x-2)$ 我们现在 ...
- Codechef October Challenge 2018 游记
Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...
- Codechef September Challenge 2018 游记
Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...
- Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
原文链接http://www.cnblogs.com/zhouzhendong/p/9010945.html 题目传送门 - Codechef STMINCUT 题意 在一个有边权的无向图中,我们定义 ...
- Codechef August Challenge 2018 : Chef at the River
传送门 (要是没有tjm(Sakits)的帮忙,我还真不知道啥时候能做出来 结论是第一次带走尽可能少的动物,使未带走的动物不冲突,带走的这个数量就是最优解. 首先这个数量肯定是下界,更少的话连第一次都 ...
- Codechef August Challenge 2018 : Safe Partition
传送门 (虽然是A了但是不知道复杂度是不是正确的 考虑以某个位置为结尾的合法划分 先考虑min,带来的影响是限制了最小长度,预处理出这个最小长度后,这可以在处理到这个数时,把不能算的部分去掉(不满足m ...
- Codechef August Challenge 2018 : Interactive Matrix
传送门 首先整个矩阵可以被分为很多小矩阵,小矩阵内所有行的单调性是一样的,所有列的单调性是一样的. 考虑如何在这样一个小矩阵中找出答案.我的策略是每次取四个角中最大值和最小值的点,这样可以每次删掉一行 ...
- Codechef August Challenge 2018 : Lonely Cycles
传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...
随机推荐
- 图学java基础篇之集合
(本文部分图片引用自其他博客,最后有链接,侵删.由于笔记使用markdown记录,格式可能不是太好看,见谅) 集合结构 红字为java.util包下的,绿字为concurrent包下扩展的与并发相关的 ...
- OpenCV学习笔记(八) 边缘、线与圆的检测
边缘检测 对图像进行边缘检测之前,一般都需要先进行降噪(可调用GaussianBlur函数). Sobel算子 与 Scharr算子 都是一个离散微分算子 (discrete differentiat ...
- 序列化模块--json模块--pickle模块-shelve模块
什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data ={# 'roles ...
- TCP/IP网络编程之多播与广播
多播 多播方式的数据传输是基于UDP完成的,因此,与UDP服务端/客户端的实现非常接近.区别在于,UDP数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机.换言之,采用多播方式时 ...
- WinRM和WinRS
1.6.2 新远程工具:WinRM和WinRS 2012-05-14 10:18 张杰良 译 清华大学出版社 字号:T | T 综合评级: 想读(18) 在读(5) 已读(0) 品书斋鉴(0) ...
- AutoMapper教程
http://www.cnblogs.com/gc2013/p/4487567.html http://www.qeefee.com/article/automapper
- (转载)django 访问url报错Forbidden (CSRF cookie not set.): xxx 问
原地址:http://www.cnblogs.com/meitian/p/7016336.html 问题:页面访问时报错 Forbidden (CSRF cookie not set.): xxx ...
- Android数据储存之File
openFileOutStream 和 openFileInStream FileInputStream fileInputStream = openFileInput(name); 打开应用下文件 ...
- 【转】unity自带寻路Navmesh入门教程(三)
http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/ 继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下 ...
- python正则 转
python中的正则表达式(re模块) 一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编 ...