枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数。用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 0 3 1
0 0
0 100
100 0
50 50 3 1
0 0
0 100
100 0
100 0 3 1
0 0
0 100
100 0
0 -1 4 4
0 0
0 100
100 0
-2 50 0 0
0 100
100 0
-1 50 */

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 5130 Signal Interference(计算几何 + 模板)

    HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...

  3. HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)

    Convex Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  4. HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4063 Description You are playing a flying game. In th ...

  5. hdu 1348:Wall(计算几何,求凸包周长)

    Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

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

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

  7. 2017多校第5场 HDU 6085 Rikka with Candies bitset

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6085 题意:存在两个长度为n,m的数组A,B.有q个询问,每个询问有一个数字k,可以得到Ai%Bj=k ...

  8. HDU 4920 Matrix multiplication(bitset)

    HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...

  9. hdu 4631Sad Love Story<计算几何>

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 题意:依次给你n个点,每次求出当前点中的最近点对,输出所有最近点对的和: 思路:按照x排序,然后用s ...

随机推荐

  1. 使用 boost 进行 CRC32 校验

    使用 boost 进行 CRC32 校验 - firebird321的专栏 - 博客频道 - CSDN.NET 使用 boost 进行 CRC32 校验 分类: 文件操作 2008-06-06 18: ...

  2. Android网络:开发浏览器(五)——功能完善之保存图片实现

    最近几天开学,所以没有更新博客.今天开始更新.最近我打算每天抽出一些事件看点Thinkin Java这本书,仔细研究下java,当然也会出这个博客关于Think in java系列的博客,大家可以一起 ...

  3. SilkTest Q&A 9

    Q81:我应该如何存取excel sheet里面的空字符串? A81:定制代码如下: 解决方案1: [-] if sText!=NULL [ ] Page.tfldName.SetText(sText ...

  4. MS Project 2007 工期、工时、资源、固定单位、固定工期、固定工时

    0. 基本概念 工期:指完成每项项目任务所经历的实际时间,及开始日期和结束时期之差.Project中,工期的默认单位是天. 工时:指将任务分配给资源后,每个资源执行任务的工作时间.Project中,工 ...

  5. tsunami:一种基于UDP协议的高速传输

    一. 需求 近期在做数据库迁移.常常须要打包实例传输.传统scp感觉非常慢. 二. 软件信息 1. 软件主页:http://tsunami-udp.sf.net/ 2. 软件安装:直接源代码make ...

  6. 忽然想到:QProcess的Read功能太强,如果有什么搞不定的,可以调用外部程序 good

    这样就可以用其它语言来无限扩展它的功能了,比如golang,比如Delphi

  7. best javascript framework list -- 最好的js框架

    Javascript Framework List | Top Javascript Framework List | Best Javascript Framework List http://co ...

  8. PhoneGap-----Contacts

    Everything in the code!!! <!DOCTYPE html> <html> <head> <title>Contact Examp ...

  9. vim高级编辑(一)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  10. 使用AjaxFileUpload.js实现文件异步上�

    ajax是无法提交文件的,所以在上传图片并预览的时候,我们常常使用Ifame的方法实现看似异步的效果.可是这样总不是非常方便的,AjaxFilleUpload.js对上面的方法进行了一个包装,使得我们 ...