HDU 1077Catching Fish(简单计算几何)
Catching Fish
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1113 Accepted Submission(s): 411
Note: If a fish is just on the border of the fishnet, it is also caught by Ignatius.
Each test case starts with a positive integer N(1<=N<=300) which indicate the number of fish in the lake. Then N lines follow. Each line contains two floating-point number X and Y (0.0<=X,Y<=10.0). You may assume no two fish will at the same point, and no two fish are closer than 0.0001, no two fish in a test case are approximately at a distance of 2.0. In other words, if the distance between the fish and the centre of the fishnet is smaller 1.0001, we say the fish is also caught.
3
6.47634 7.69628
5.16828 4.79915
6.69533 6.20378
6
7.15296 4.08328
6.50827 2.69466
5.91219 3.86661
5.29853 4.16097
6.10838 3.46039
6.34060 2.41599
8
7.90650 4.01746
4.10998 4.18354
4.67289 4.01887
6.33885 4.28388
4.98106 3.82728
5.12379 5.16473
7.84664 4.67693
4.02776 3.87990
20
6.65128 5.47490
6.42743 6.26189
6.35864 4.61611
6.59020 4.54228
4.43967 5.70059
4.38226 5.70536
5.50755 6.18163
7.41971 6.13668
6.71936 3.04496
5.61832 4.23857
5.99424 4.29328
5.60961 4.32998
6.82242 5.79683
5.44693 3.82724
6.70906 3.65736
7.89087 5.68000
6.23300 4.59530
5.92401 4.92329
6.24168 3.81389
6.22671 3.62210
5
5
11
题目大意:给你n个点的横纵坐标,问你用一个单位圆,最多能使得多少点在圆内,包括圆上的点。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdio>
using namespace std;
int n;
struct node
{
double x;
double y;
};
node a[305]; double dis(node p1,node p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
} int cal(int p1,int p2)
{
node t1,t2,t3,t4;
t1=a[p1],t2=a[p2];
double s,tmp,xx,yy;
tmp=dis(t1,t2);
s=tmp/2.0;
s=sqrt(1.0-s*s); //s为圆心到t1,t2弦长的距离
int ans1=0,ans2=0,i;
xx=(t1.y-t2.y)/tmp;
yy=(t2.x-t1.x)/tmp; //(xx,yy)相当于与弦长垂直的单位法向量
t3.x=(t1.x+t2.x)/2.0,t3.y=(t1.y+t2.y)/2.0;
t4.x=t3.x+s*xx,t4.y=t3.y+s*yy; //t4为圆心
for(i=0;i<n;i++)
{
if(dis(t4,a[i])<1.0001)
ans1++;
}
t4.x=t3.x-s*xx,t4.y=t3.y-s*yy; //t4为圆心
for(i=0;i<n;i++)
{
if(dis(t4,a[i])<1.0001)
ans2++;
}
return ans1>ans2?ans1:ans2;
} int main()
{
int i,j;
int tes;
scanf("%d",&tes); while(tes--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf%lf",&a[i].x,&a[i].y);
int num;
int res=1;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(dis(a[i],a[j])<2.0001)
{
num=cal(i,j);
if(num>res) res=num;
}
} printf("%d\n",res);
}
return 0;
} //2406MS
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdio>
using namespace std;
int n;
double a[305][2]; double dis(double *b1,double *b2)
{
return sqrt((b1[0]-b2[0])*(b1[0]-b2[0])+(b1[1]-b2[1])*(b1[1]-b2[1]));
} int cal(int p1,int p2)
{
double t1[2],t2[2],t3[2],t4[2];
t1[0]=a[p1][0],t1[1]=a[p1][1],t2[0]=a[p2][0],t2[1]=a[p2][1];
double s,tmp,xx,yy;
tmp=dis(t1,t2);
s=tmp/2.0;
s=sqrt(1.0-s*s); //s为圆心到t1,t2弦长的距离
int ans1=0,ans2=0,i;
xx=(t1[1]-t2[1])/tmp;
yy=(t2[0]-t1[0])/tmp; //(xx,yy)相当于与弦长垂直的单位法向量
t3[0]=(t1[0]+t2[0])/2.0,t3[1]=(t1[1]+t2[1])/2.0;
t4[0]=t3[0]+s*xx,t4[1]=t3[1]+s*yy; //t4为圆心
for(i=0;i<n;i++)
{
if(dis(t4,a[i])<1.0001)
ans1++;
}
t4[0]=t3[0]-s*xx,t4[1]=t3[1]-s*yy; //t4为圆心
for(i=0;i<n;i++)
{
if(dis(t4,a[i])<1.0001)
ans2++;
}
return ans1>ans2?ans1:ans2;
} int main()
{
int i,j;
int tes;
scanf("%d",&tes); while(tes--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf%lf",&a[i][0],&a[i][1]);
int num;
int res=1;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(dis(a[i],a[j])<2.0001)
{
num=cal(i,j);
if(num>res) res=num;
}
} printf("%d\n",res);
}
return 0;
} //984MS G++
HDU 1077Catching Fish(简单计算几何)的更多相关文章
- HDU 4643 GSM 简单计算几何
今天比赛的时候略坑, admin告诉我询问Q的个数不超过n^2, 赛后敲了个 O(Q*m^3)的复杂度,但这个复杂度常数比较低,可能在除以个小常数, 300ms过了,真心无语,数据应该水了吧,比赛的时 ...
- HDU 2085 核反应堆 --- 简单递推
HDU 2085 核反应堆 /* HDU 2085 核反应堆 --- 简单递推 */ #include <cstdio> ; long long a[N], b[N]; //a表示高能质点 ...
- HDU 5130 Signal Interference(计算几何 + 模板)
HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...
- ●POJ 1556 The Doors(简单计算几何+最短路)
●赘述题目 10*10的房间内,有竖着的一些墙(不超过18个).问从点(0,5)到(10,5)的最短路. 按照输入样例,输入的连续5个数,x,y1,y2,y3,y4,表示(x,0--y1),(x,y2 ...
- 2018.07.04 POJ 2398 Toy Storage(二分+简单计算几何)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad have a problem: their ch ...
- Least Common Multiple (HDU - 1019) 【简单数论】【LCM】【欧几里得辗转相除法】
Least Common Multiple (HDU - 1019) [简单数论][LCM][欧几里得辗转相除法] 标签: 入门讲座题解 数论 题目描述 The least common multip ...
- 七夕节 (HDU - 1215) 【简单数论】【找因数】
七夕节 (HDU - 1215) [简单数论][找因数] 标签: 入门讲座题解 数论 题目描述 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们 ...
- [HDU 4082] Hou Yi's secret (简单计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4082 题目大意: 给你n个点,问能最多构成多少个相似三角形. 用余弦定理,计算三个角度,然后暴力数有多 ...
- HDU 4617 Weapon (简单三维计算几何,异面直线距离)
Weapon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
随机推荐
- 10、TV UI
TV UI布局 1. 为大屏幕提供适当的布局源文件. 2. 确保UI在一定距离仍然可以看清. 3. 为高清电视提供高分辨率的图标和图像. 1. 把屏幕上的导航控制菜单放在屏幕的左边或者右边,并且将 ...
- Entity Framework 5.0
今天 VS2012 .net Framework 4.5 Entity Framework 5.0 三者共同发布了. ( EF5 Released ) 在介绍新特性之前,先与大家回顾一下EF版 ...
- IOS 支付宝 SDK 申请
https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash
- XCode修改工程名注意
以下文字转载过来,在使用的过程中遇到几个问题 1.需要在 Build phases 里面,检查下 Link Binary With Libraries 以及Compline Sources 2.Bul ...
- JavaScript UI技术选型
ExtJS l ExtJS(TODO:找旧版本,类似现在EasyUI插件的旧版本)简介:纯JS支持:IE6授权:GPLv3授权.商业授权($329/人) l Ext.NET简介:ExtJS的NET封装 ...
- html在图片上实现下雨效果
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Kindle Paperwhite 2使用体验
博客开通后一懒就扔下了几十天,着实自惭.鉴于是第一篇,先说点题外话. 一转眼读研的生活已经过去一年有余.曾经的同学已经在职场拼搏,同龄人的生活状态也自然地带给自己一份紧迫感:不敢再贪恋校园生活的安逸, ...
- MySQL CURDATE() 函数
定义和用法 CURDATE() 函数返回当前的日期. 语法 CURDATE() 实例 例子 1 下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果类似 ...
- [HIve - LanguageManual] Union
Union Syntax select_statement UNION ALL select_statement UNION ALL select_statement ... UNION is use ...
- SRM 514 DIV1 500pt(DP)
题目简述 给定一个H×W大小的矩阵,每个格子要么是1~9中的一个数,要么是".",要求你把“.”填成具体的数字(1~9),并且符合以下两个要求: 对于所有的整数r 和 c( 0 & ...