蒟蒻求助
  • 板块灌水区
  • 楼主Buttler
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/10 14:23
  • 上次更新2024/3/10 16:34:23
查看原帖
蒟蒻求助
1043457
Buttler楼主2024/3/10 14:23

code:

#include<bits/stdc++.h>
using namespace std;
struct sss{
	string name;
	int ax,ay,ai;
	long long dis;
}a[114514];
long long n,k,h,l;
bool cmp(sss aa,sss bb){
	return aa.dis<bb.dis||(aa.dis<bb.dis&&aa.ai<bb.ai);
}
int main(){
	freopen("find.in","r",stdin);
	freopen("find.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++) {
	cin>>a[i].name>>a[i].ax>>a[i].ay;	
	h=a[i].ax;
	l=a[i].ay;
	a[i].dis=sqrt(1.0*h*h+l*l)*10000;
	}
	sort(a+1,a+1+n,cmp);
	int t=1,ans=0;
	for(int i=2;i<=n;i++){
		if(t==k) {
			ans=a[i-1].dis;			
			break;
		}
		if(a[i].dis==a[i+1].dis) continue;
		else t++;
	}
	if(t<k) {
	cout<<"555..."<<endl;	
	return 0;
	}
	int m=0;
	for(int i=1;i<=n;i++) {
		if(a[i].dis==ans) m++;
	}
	cout<<ans/10000<<' '<<m<<endl;
	for(int i=1;i<=n;i++) {
		if(a[i].dis==ans) cout<<a[i].name;
	}
	return 0;
}

题目: 题目描述 新年到了,你好友和你(K个人)的周围满是礼物,你让你的好友先拿,但是每个人只能拿当前离自己最近的礼物【当然如果有并列的多个礼物离你的距离相等(精确到小数后四位,所有运算均为去尾),这些礼物就都属于这个人】。现在你们所在的位置是原点(0,0),每个礼物的位置用坐标表示。现在告诉你每个礼物的坐标,还有每个礼物是谁送的。要你找出你的礼物离你多远,你能拿到多少礼物,这些礼物是谁送的。如果你拿不到礼物,请输出“555...”

输入格式 第一行:N 和 K 分别表示礼物的个数和人数。

第二到N+1行:每行先是赠送礼品人的姓名,然后是礼物的坐标(x,y)。

数据间空格分割

输出格式 第一行: D 和 U 表示礼物距你多远(只要去尾后的整数)和你能拿到多少礼物。

第二到U+1行:每行一个人名,表示送礼的人。<按照输入的顺序输出>

样例数据 input

5 2

Jason 1 1

Herry 4 4

Patty 3 4

Tom 2 10

Petter 5 10

output

5 1

Patty

数据规模与约定

对于30%的数据 K≤N≤1000

对于所有的数据 K≤N≤100000

所有的坐标均为整数,绝对值小于10^6

2024/3/10 14:23
加载中...