枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数。用bitset记录。

然后三角形就是3个bitset&一下

#include <cstdio>
#include <cstring>
#include <bitset>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 101;
const int M = 1005;
bitset<M> b1[N*N], b2[N*N];
int x[N], y[N], px[M], py[M];
bool check(int i, int j, int k) {if(x[i] != x[j]) {double yy = (double)(y[i] - y[j]) / (x[i] - x[j]) * (x[k] - x[i]) + y[i];if(y[k] >= yy) return true;else return false;} else {if(x[k] >= x[i])return true;else return false;}
}
void put(bitset<M> x) {for(int i = 0; i < M; i ++) {if(x[i]) printf("%d ", i);}puts("*");
}
int main() {int n, m, cas = 0;while(~scanf("%d%d", &n, &m)) {for(int i = 0; i < n; i ++) {scanf("%d%d", &x[i], &y[i]);}for(int i = 0; i < m; i ++) {scanf("%d%d", &px[i], &py[i]);}for(int i = 0; i < n; i ++) {for(int j = i+1; j < n; j ++) {for(int k = 0; k < m; k ++) {//        printf("%d %d  ", i, j);if(x[i] != x[j]) {double yy = (double)(y[i] - y[j]) / (x[i] - x[j]) * (px[k] - x[i]) + y[i];if(py[k] == yy) {b1[i*n+j].set(k);b2[i*n+j].set(k);}else if(py[k] > yy) {b1[i*n+j].set(k);//               printf("u1-%d", k);} else {b2[i*n+j].set(k);//               printf("d1-%d", k);}} else {if(px[k] == x[i]) {b1[i*n+j].set(k);b2[i*n+j].set(k);}else if(px[k] > x[i])  {b1[i*n+j].set(k);//             printf("u2-%d", k);} else {b2[i*n+j].set(k);//               printf("d2-%d", k);}}//       puts("");}//          printf("  %d %d %d %d\n", i, j, b1[i*n+j].count(), b2[i*n+j].count());}}bitset<M> tmp(0);int ans = 0;for(int i = 0; i < n; i ++) {for(int j = i+1; j < n; j ++) {for(int k = j+1; k < n; k ++) {if(check(i, j, k)) {tmp = b1[i*n+j];//                 printf("UU1 ");//                 put(b1[i*n+j]);}else {tmp = b2[i*n+j];//             put(b2[i*n+j]);}if(check(i, k, j)) {tmp &= b1[i*n+k];//                  printf("UU2 ");//             put(b1[i*n+k]);}else {tmp &= b2[i*n+k];//                    put(b2[i*n+k]);}if(check(j, k, i)) {tmp &= b1[j*n+k];//              printf("UU3 ");//         put(b1[j*n+k]);}else {tmp &= b2[j*n+k];//                    put(b2[j*n+k]);}//         printf("***%d %d %d %d\n", i, j, k, tmp.count());if(tmp.count() & 1) ans ++;}}}printf("Case %d: %d\n", ++cas, ans);for(int i = 0; i < n*n; i ++) {b1[i].reset();b2[i].reset();}}return 0;
}/*
3 1
0 0
0 100
100 0
0 03 1
0 0
0 100
100 0
50 503 1
0 0
0 100
100 0
100 03 1
0 0
0 100
100 0
0 -14 4
0 0
0 100
100 0
-2 500 0
0 100
100 0
-1 50*/

转载于:https://www.cnblogs.com/mfrbuaa/p/5061608.html

HDU 4380 Farmer Greedy 计算几何+bitset相关推荐

  1. HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A 题目意思大致为由n个点(n小于100)和m个金矿 ...

  2. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  3. hdu 5964:平行四边形 【计算几何】

    打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...

  4. hdu 6072 Logical Chain Kozaraju+bitset

    题意 有一张n个节点的有向图,m组操作,每次最多翻转K条边,求每组操作后可以相互到达的点的对数. n ≤ 250 , m ≤ 25000 , k ≤ 10 n\le250,m\le25000,k\le ...

  5. CF 333E 计算几何+bitset优化

    http://codeforces.com/contest/333/problem/E 题意:3000个点,选三个组成三角形,输出最长的最短边  的一半 思路:枚举边,对边排序,之后维护每个点连接的点 ...

  6. hdu 4667 Building Fence 计算几何模板

    1 //大白p263 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 #include ...

  7. 关于多边形内点数问题的一些变形

    最近两次比赛出现两道相同类型的题,有人十几分钟就AC了,而有人卡了俩小时...反思.. 先说hdu4353这道题,题意是要求一个从N个点1里边画出一个多边形来,然后给出M个点2.让这个(多边形的面积/ ...

  8. 算法竞赛入门与进阶 (二)单调队列、单调栈

    栈(stack)和队列( queue ) 1.栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出) 2.队列的定义:队列是一种特殊的线性表,特殊之处在于 它只允许在表的前端(front)进 ...

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

最新文章

  1. android编译error, forbidden warning出错问题解决
  2. jasperreports java web报表_iReport+jasperReports制作WEB报表
  3. 微软太良心,这么强大的软件竟然完全免费!
  4. linux 系统监控、诊断工具之 top 详解
  5. Java通过class文件得到所在jar包
  6. 20应用统计考研复试要点(part6)--统计学
  7. Obj-C 实现设计模式 -- Observer
  8. SSH远程终端连接数问题
  9. Jquery对复选框的操作
  10. 前端学习(2433):创建页面组件
  11. Php底层深度探索(2)---Apache运行机制剖析 王泽宾
  12. 刘强东为抗疫发声:我们送的不是货,是温暖和希望!
  13. 计算机的3d软件家庭版,3DOne家庭版 64位
  14. FFmpeg连载2-分离视频和音频
  15. delphi socket 怎样把接收到的二进制数据转换成字符串显示_【连载电子书二】Python基础数据类型详解(上)...
  16. 计算机发展英文文献,计算机技术发展英文参考文献 计算机技术发展论文参考文献哪里找...
  17. 随机过程(基本概念、平稳随机过程)
  18. 2017 Multi-University Training Contest 3 solutions BY 洪华敦
  19. 搞一个yyds的京东登录页面
  20. JAVA基础之单例模式

热门文章

  1. dk7与jdk8环境共存与切换
  2. 依赖倒置原则_C#教您一步步摆脱面向过程:依赖倒置
  3. python不规则切片_python的切片(slice)机制
  4. python大神作品_Python大神的书单
  5. mysql长连接_mysql.connector 数据库长连接
  6. mybatis-plus对datetime返回去掉.0_0欧姆电阻到底有没有用?这12个作用说明其不可或缺...
  7. 系统学习NLP(二十六)--BERT详解
  8. 编译原理教程_8 静态语义分析和中间代码生成
  9. java避免活锁.死锁的解决,java并发编程(九): 避免活跃性危险
  10. java timer指定线程池_Java 定时器(Timer)及线程池里使用定时器实例代码