我是靠谱客的博主 迅速咖啡,最近开发中收集的这篇文章主要介绍JZOJ 1361. 【2011.12.31普及模拟】抓捕嫌疑犯(suspect)题目: 题意: ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:

http://blog.csdn.net/qq_35786326/article/details/79191178

题意:

 求距离小Z为k的人有几位
分析:
 我们可以先排序,然后根据勾股定理求出距离,最后输出
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct node{
	int x1,y1;double jl;
}h[50001];//结构体,以便我们之后通过一次快排将所有顺序排好
bool cmd(node x1,node y1)
{
	return x1.jl>y1.jl||x1.jl==y1.jl&&x1.x1<y1.x1||x1.jl==y1.jl&&x1.x1==y1.x1&&x1.y1<y1.y1;//根据题目条件得出
}
int main()
{
	freopen("suspect.in","r",stdin);
	freopen("suspect.out","w",stdout);
	int x,y,a[30001],b[30001],n,k;
	scanf("%d%d",&x,&y);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&h[i].x1,&h[i].y1);
		h[i].jl=(double)sqrt(fabs(x-h[i].x1)*fabs(x-h[i].x1)+fabs(y-h[i].y1)*fabs(y-h[i].y1));//社会我勾股
	}
	sort(h+1,h+n+1,cmd);
	int t=0;double sg=0;int w=1;
	while(t!=k)//求出第一个人是谁
	{
		if(h[w].jl!=sg) t++,sg=h[w].jl;
		w++;
	}
	t=0;
	int i=w-1;
	while(i<=n&&(double)sqrt(fabs(x-h[i].x1)*fabs(x-h[i].x1)+fabs(y-h[i].y1)*fabs(y-h[i].y1))==sg)//将所有的符合要求的嫌疑犯求出
		t++,i++;
	printf("%dn",t);
	for(int j=i-t;j<=i-1;j++) printf("%d %dn",h[j].x1,h[j].y1);
	fclose(stdin);
	fclose(stdout);
	return 0;
}


 







最后

以上就是迅速咖啡为你收集整理的JZOJ 1361. 【2011.12.31普及模拟】抓捕嫌疑犯(suspect)题目: 题意: 的全部内容,希望文章能够帮你解决JZOJ 1361. 【2011.12.31普及模拟】抓捕嫌疑犯(suspect)题目: 题意: 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部