• 找礼物(find)


    找礼物(find)

    题目描述

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

    输入

    第1行:N和K分别表示礼物的个数和人数(K≤N≤100000);
    第2到N+1行:每行先是赠送礼品人的姓名,然后是礼物的坐标(x,y)(坐标绝对值小于106)。数据间用空格分开。

    输出

    第1行:D和U表示礼物距你多远(只要去尾后的整数)和你能拿到多少礼物。
    第2到U+1行:每行一个人名,表示送礼的人(按照输入的顺序输出)。

    样例输入

    5 2
    Jason 1 1
    Herry 4 4
    Patty 3 4
    Tom 2 10
    Petter 5 10
    

    样例输出

    5 1
    Patty
    分析:求距离时注意算到long long即可,set用来去重,最后按序输出答案即可;
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include <ext/rope>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define vi vector<int>
    #define pii pair<int,int>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e5+10;
    const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    using namespace __gnu_cxx;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    int n,m;
    pair<ll,string>a[maxn],b[maxn];
    set<ll>q;
    vector<string>pp;
    int main()
    {
        int i,j,k,t;
        cin>>n>>m;
        rep(i,0,n-1)
        {
            string p;
            ll x,y,r;
            cin>>p>>x>>y;
            r=(ll)(sqrt(1.0*x*x+y*y)*10000);
            a[i]=mp(r,p);
            b[i]=a[i];
            q.insert(r);
        }
        sort(a,a+n);
        if(q.size()<m)puts("555...");
        else
        {
            int now=0;
            ll ans;
            for(ll x:q){now++;if(now==m){ans=x;break;}}
            rep(i,0,n-1)
            {
                if(ans==b[i].fi)pp.pb(b[i].se);
            }
            cout<<ans/10000<<" "<<pp.size()<<endl;
            for(string x:pp)cout<<x<<endl;
        }
        //system ("pause");
        return 0;
    }
     
  • 相关阅读:
    本博客停止更新说明
    JavaScript备忘录(3)——正则表达式
    JavaScript备忘录(2)——闭包
    JavaScript备忘录(1)——内置类型
    CSS布局:Float布局过程与老生常谈的三栏布局
    地图投影简明笔记
    Three.js源码阅读笔记-5
    js中 set, map区别
    Package.json详解
    node.js 中的package.json文件怎么创建?
  • 原文地址:https://www.cnblogs.com/dyzll/p/5723019.html
Copyright © 2020-2023  润新知