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