HDU 4380 Farmer Greedy 计算几何+bitset
枚举直线,对于直线的某个点在直线的左端还是右端,能够状压出一个数。用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的更多相关文章
- HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115760#problem/A 题目意思大致为由n个点(n小于100)和m个金矿 ...
- HDU 5130 Signal Interference(计算几何 + 模板)
HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...
- HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)
Convex Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 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 ...
- hdu 1348:Wall(计算几何,求凸包周长)
Wall Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1174:爆头(计算几何,三维叉积求点到线的距离)
爆头 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- 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 ...
- HDU 4920 Matrix multiplication(bitset)
HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...
- hdu 4631Sad Love Story<计算几何>
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 题意:依次给你n个点,每次求出当前点中的最近点对,输出所有最近点对的和: 思路:按照x排序,然后用s ...
随机推荐
- Delphi图像处理 -- 最大值
阅读提示: <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM. <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...
- Windows环境下访问NFS(33篇Storage的文章)
Windows环境下访问NFS 使用Solaris时,如果想在两台Solaris之间共享数据,那么你想到的最省事.最方便的方法肯定是nfs.但是现在的学生们的桌面,估计99%以上都是Windows,W ...
- 很好用的一个类:TJvAppXMLFileStorage
以前写软件的时候,在处理软件配置信息的时候,总是要写很多重复的代码,把配置信息写到Ini文件当中.昨天到网上查了一下,发现JVCL中提供了一个非常好用的类TJvAppXMLFileStorage,可以 ...
- 积累的VC编程小技巧之工具条和状态条
1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上 ...
- LCD显示--Ht1621b芯片显示屏驱动
Ht1621b芯片显示屏驱动 关于HT1621b芯片的具体信息能够參考数据手冊上的内容:百度文库HT1621b中文资料 CS : 片选输入接一上拉电阻当/CS 为高电平读写HT1621的数据和命令无效 ...
- Mysql ODBC 5.1 Driver免安装脚本
在使用Mysql 的时候,需要使用ODBC数据源的方式来连接mysql,所以常常需要用到免安装的驱动,自己参考官网的脚本, 修改了一个实用点的脚本,放出来大家一起分享: 安装mysql odbc 5. ...
- 单例模式(Singleton)Holder
public class Singleton { /** * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载 */ ...
- DataReader和DataSet的区别以及使用
DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示: DataReader DataSet 数 ...
- ThinkPHP框架配置自定义的模板变量(十)
原文:ThinkPHP框架配置自定义的模板变量(十) 模板替换(手册有详细介绍对应的目录) __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ __ROOT__: 会替换成当 ...
- GMM的EM算法
在聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明 ...