ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)
POJ2318
本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适
//计算几何-叉积入门题
//Time:157Ms Memory:828K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 5005
struct Point{
int x,y;
Point(int xx=0, int yy=0):x(xx), y(yy){}
friend bool operator < (Point p1, Point p2){
return (p1.x < p2.x) || (p1.x == p2.x && p1.y < p2.y);
}
}ul, lr, p[2*MAXN], toy[MAXN];
int n, m;
int num[MAXN];
int cross(Point a, Point b, Point s)//叉积-(s在ab左侧返回>0)
{
return (a.x-s.x) * (b.y-s.y) - (a.y-s.y) * (b.x-s.x);
}
int main()
{
//freopen("in.txt", "r", stdin);
while(scanf("%d", &n), n)
{
memset(num, 0, sizeof(num));
scanf("%d%d%d%d%d", &m, &ul.x, &ul.y, &lr.x, &lr.y);
for(int i=0; i<n; i++)
{
int u,l;
scanf("%d%d", &u,&l);
p[2*i] = Point(u, ul.y);
p[2*i+1] = Point(l, lr.y);
}
p[2*n] = Point(lr.x, ul.y);
p[2*n+1] = Point(lr.x, lr.y);
for(int i=0; i<m; i++)
scanf("%d%d", &toy[i].x, &toy[i].y);
sort(toy, toy+m);
int cur = 0;
for(int i=0; i<m; i++)
{
for(int j=cur; j<=n; j++)
{
if(cross(p[j*2+1], p[j*2], toy[i]) > 0) //to left test
{
num[j]++; break;
}
}
while(toy[i].x > max(p[cur*2+1].x, p[cur*2].x))
cur++;
}
for(int i = 0; i <= n;i++)
printf("%d: %d\n", i, num[i]);
printf("\n");
}
return 0;
}
POJ2398
题意同上,不同在于线段是随机的(需对线段排序),且要求输出为相同统计数的格子数量
//计算几何-叉积入门题-需对线段排序
//题意同POJ2318
//Time:0Ms Memory:724K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 1005
struct Point{
int x,y;
Point(int xx=0, int yy=0):x(xx), y(yy){}
friend bool operator < (Point p1, Point p2){
return (p1.x < p2.x) || (p1.x == p2.x && p1.y < p2.y);
}
}ul, lr, toy[MAXN];
struct Line{
int a,b,c,d;
Line(int aa=0, int bb=0, int cc=0, int dd=0):a(aa),b(bb),c(cc),d(dd){}
friend bool operator < (Line l1, Line l2){
return (l1.a < l2.a) || (l1.a == l2.a && l1.c < l2.c);
}
}line[MAXN];
int n, m;
int num[MAXN], cnt[MAXN];
int cross(Point a, Point b, Point s)//叉积-(s在ab左侧返回>0)
{
return (a.x-s.x) * (b.y-s.y) - (a.y-s.y) * (b.x-s.x);
}
int main()
{
//freopen("in.txt", "r", stdin);
while(scanf("%d", &n), n)
{
memset(num, 0, sizeof(num));
memset(cnt, 0, sizeof(cnt));
scanf("%d%d%d%d%d", &m, &ul.x, &ul.y, &lr.x, &lr.y);
for(int i=0; i<n; i++)
{
int u,l;
scanf("%d%d", &u,&l);
line[i] = Line(u, ul.y, l, lr.y);
}
line[n] = Line(lr.x, ul.y, lr.x, lr.y);
sort(line, line+n+1);
for(int i=0; i<m; i++)
scanf("%d%d", &toy[i].x, &toy[i].y);
sort(toy, toy+m);
int cur = 0;
for(int i=0; i<m; i++)
{
for(int j=cur; j<=n; j++)
{
if(cross(Point(line[j].c, line[j].d), Point(line[j].a,line[j].b), toy[i]) > 0) //to left test
{
num[j]++; break;
}
}
while(toy[i].x > max(line[cur].a, line[cur].c))
cur++;
}
for(int i=0; i<=n; i++)
cnt[num[i]]++;
printf("Box\n");
for(int i = 1; i <= n;i++)
if(cnt[i]) printf("%d: %d\n", i, cnt[i]);
}
return 0;
}
ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)的更多相关文章
- ACM/ICPC 之 网络流入门-EK算法(参考模板)(POJ1273)
基于残留网络与FF算法的改进-EK算法,核心是将一条边的单向残留容量的减少看做反向残留流量的增加. //网络流 //EK算法 //Time:16Ms Memory:348K #include<i ...
- ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)
第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- 训练报告 (2014-2015) 2014, Samara SAU ACM ICPC Quarterfinal Qualification Contest
Solved A Gym 100488A Yet Another Goat in the Garden B Gym 100488B Impossible to Guess Solved C Gym ...
- POJ P2318 TOYS与POJ P1269 Intersecting Lines——计算几何入门题两道
rt,计算几何入门: TOYS Calculate the number of toys that land in each bin of a partitioned toy box. Mom and ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering
Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...
随机推荐
- sql server多重行列转置的优化
将表1转化成表2: 表1 表2 得到表2的结果,需要经过多次pivot转换,再经union连接到一起,代码如下: ] from ( select 'a' as type, * from Table_1 ...
- jQuery 邮箱下拉列表自动补全
综述 我想大家一定见到过,在某个网站填写邮箱的时候,还没有填写完,就会出现一系列下拉列表,帮你自动补全邮箱的功能.现在我们就用jQuery来实现一下. 博主原创代码,如有代码写的不完善的地方还望大家多 ...
- 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II
http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...
- mysql general log日志
注:应一直出现http://www.cnblogs.com/hwaggLee/p/6030765.html文章中的问题 故mysql general log日志.查看具体是什么命令导致的. 打开 ge ...
- 自定义UIBarButtonItem
如果是通过UIButton自定义UIBarButtonItem,那么通过如下这个方式设置title是无效的.必须要直接给button设置title. self.navigationItem.right ...
- 用Python实现多核心并行计算
平常写的程序,无论是单线程还是多线程,大多只有一个进程,而且只能在一个核心里工作.所以很多应用程序即使正在满载运行,在任务管理器中CPU使用量还是只有50%(双核CPU)或25%(四核CPU) 如果能 ...
- Bzoj3894 文理分科
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 667 Solved: 389 Description 文理分科是一件很纠结的事情!(虽然看到这个题 ...
- ElasticSearch中bulkProcesser使用
初次接触es,可能对增删改查很熟悉,以为能为得心应手,本次应用场景为 数据库变更一条记录,会触发更新es中的数据,每秒并发大概30条左右,测试环境一切工作正常(数据量较少),上线后发现日志中很多类似于 ...
- css3 背景渐变
本来想先瞎扯些什么,然后又不知道讲什么的好,那就直接进入正题吧. 参考资料: Using CSS gradients (以及该页面内的大部分链接页面的资料) 首先区分下,平常给的纯色backgrou ...
- 5分钟部署ELK+filebeat5.1.1
标题有点噱头,不过网络环境好的情况下也差不多了^_^ 1. 首先保证安装了jdk. elasticsearch, logstash, kibana,filebeat都可以通过yum安装,这里前 ...