题目链接  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;
}

  

最新文章

  1. Spring和Mybatis整合,配置文件
  2. bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)
  3. 使用OWIN 为WebAPI 宿主 跨平台
  4. 【BZOJ 3809】Gty的二逼妹子序列
  5. 关于CDH中开发Spark
  6. Thinking in Java--笔记(2)
  7. iOS UILabel自定义行间距时获取高度
  8. Python设计模式——单例模式
  9. 『重构--改善既有代码的设计』读书笔记----Change Value to Reference
  10. javascript 的基本优化
  11. MPEG2_TS流基本概念和数据结构
  12. hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
  13. CTFcracktools——非常实用的CTF解密工具
  14. 语音识别(LSTM+CTC)
  15. webform运行时弹出JavaScript的alert窗口
  16. AAPTEXECPTION
  17. Spark streaming的执行流程
  18. [Android Pro] 深入理解函数的调用过程——栈帧
  19. 微服务(Microservice)那点事
  20. C++ vs Python向量运算速度评测

热门文章

  1. poj1142 Smith Numbers
  2. HashMap的实现原理和底层数据结构
  3. Linux下安装nginx,以及启动和停止
  4. 扩展MarkDown表格
  5. Eclipse配置Maven工具
  6. Python框架之Django学习笔记(一)
  7. IOS开发---菜鸟学习之路--(七)-自定义UITableViewCell
  8. Windows网络编程笔记4 -- Winsock 协议相关知识
  9. WordPress 通过文章 URL 获取文章 ID
  10. linux文件备份到windows方法