Time Limit: 10 second

Memory Limit: 2 MB

问题描述

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

Input

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

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

数据间空格分割

Output

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

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

Sample Input

10 2
Pos 18426 3429
Kill -28989 -12602
WGPO -6095 11806
EhiEN 4 -3
DICV 7752 -27723
FBI 15713 -24074
QOHR -3194 -30639
WWJ 3 4
GKIX -5 0
CB 0 2

Sample Output

5 3
EhiEN
WWJ
GKIX

【题解】

保留4位的方法是 floor( sqrt(x*x + y*y) * 10000)/10000;存入数组中,以距离为关键字进行升序排。然后先给其他的小伙伴分,最后剩下自己的,在输入数据的时候记录每个礼物出现的先后顺序,最后输出的时候对自己要输出的礼物按照出现的顺序再排一次序。最后输出就好。这里的double类可以直接用“==”判断两个数是否相等。前面输入字符串的时候,用了char* name[90000] 这个东西,在输入之前要getchar一下,然后是num[i] = new char[1000],之后就能用scanf("%s")来进行输入了,会遇到空格停止。所以可以直接一排输入scanf("%s%lf%lf"),当然这是从别人那里挖过来的。用cin会超时。

【代码】

#include <cstdio>
#include <iostream>
#include <string>
#include <cmath>
#include <stdlib.h> using namespace std; struct data
{
double dis;
int first;
}; int n,k;
data a[90000];
char* name[90000]; //要记住这个输入字符串的写法 void input_data()
{
scanf("%d %d",&n,&k);
int m = 0;
getchar(); //在用之前要先getchar一下。
for (int i = 1;i <= n;i++)
{
name[i] = new char[1000]; //记住 new char [长度]
double x,y;
scanf("%s%lf%lf",name[i],&x,&y); //就可以直接用“%s"来进行输入了
a[i].dis = floor( sqrt(x*x + y*y) * 10000)/10000; //floor是取整函数
a[i].first = ++m; //记录下每个礼物出现的先后顺序
}
} void kp(int l,int r) //以距离为关键字进行从小到大排
{
int i = l,j = r;
double m = a[(i+j)/2].dis;
do
{
while (a[i].dis < m) i++;
while (m < a[j].dis) j--;
if (i <= j)
{
a[0] = a[i];a[i] = a[j];a[j] = a[0]; //与之相关的所有东西 都要进行变换
name[0] = name[i];name[i] = name[j];name[j] = name[0];
i++;j--;
}
}
while (i <= j);
if (l < j) kp(l,j);
if (i < r) kp(i,r);
} void kp2(int l,int r) //以出现的先后顺序为关键字 进行从小到大排序
{
int i = l,j = r,m = a[(i+j)/2].first;
do
{
while (a[i].first < m) i++;
while (m < a[j].first) j--;
if (i <= j)
{
a[0] = a[i];a[i] = a[j];a[j] =a[0];
name[0] = name[i];name[i] = name[j];name[j] = name[0];
i++;j--;
}
}
while (i <=j );
if (l < j) kp2(l,j);
if (i < r) kp2(i,r);
} void get_ans()
{
k--; //k包括自己 我们先减去自己 处理其他人
kp(1,n);
int i = 1;
while (k > 0 && i <= n) //先过滤掉别人的礼物
{
int j = i+1;
while ( a[j].dis == a[i].dis) j++;
i = j;
k--;
}
if (k > 0) //如果别人都没分完则自己不可能有剩余礼物。但是好像有问题。。。如果别人刚好分完了呢?我在下面加几行。
{
printf("555…");
return;
}
if (k == 0 && i > n)
{
printf("555…");
return;
}
int j = i+1;
while ( a[j].dis == a[i].dis) j++;//然后找哪些礼物是自己的。
int dd = int(a[i].dis); //直接取整就好
printf("%d %d\n",dd,j-i);
kp2(i,j-1); //对自己的礼物以出现的先后顺序进行排序。
for (int kk = i;kk <=j-1;kk++)
printf("%s\n",name[kk]);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
return 0;
}

【9210】找礼物(char* num[2000]的使用 get char num[i] = new char[1000])的更多相关文章

  1. 找礼物(find)

    找礼物(find) 题目描述 新年到了,你的好友和你(共K个人)的周围满是礼物,你让你的好友先拿,但是每个人只能拿当前离自己最近的礼物[当然如果有并列的多个礼物离你的距离相等(精确到小数点后四位,所有 ...

  2. 找礼物(find)(模拟)

    找礼物(find) 时间限制: 1 Sec  内存限制: 64 MB提交: 57  解决: 4[提交][状态][讨论版] 题目描述 新 年到了,你的好友和你(共K个人)的周围满是礼物,你让你的好友先拿 ...

  3. C# 将long类型写入二进制文件用bw.Write(num);将其读出用long num= br.ReadInt64();

    理由: 因为long类型是 System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方) 而long BinaryReader ...

  4. c语言个人财务管理系统

    这个是我的一个网上朋友写的,仅供大家参考: 在这里留个记录 #include<stdio.h>#include<string.h>#define null 0#define m ...

  5. TIME_WAIT引起Cannot assign requested address报错

    1.  问题描述 有时候用redis客户端(php或者java客户端)连接Redis服务器,报错:"Cannot assign requested address." 原因是客户端 ...

  6. Oracle数据库(一)概述、基础与简单操作

    数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 数据库分类: 关系型数据库 非关系型数据库 数据库 类型 特性 优点 缺点 关系型数据库 SQLite.Oracle. ...

  7. vue 基础(一)

    一 vue.js的M-V-VM思想 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. 1.Model指代的就是vue对象的data属性里面的数据.这里的数 ...

  8. Java语言基础(9)

    1 方法(二) 1) 不带参数没有返回值的方法: 案例:Demo1 public class Demo1 { static void show(){ System.out.println(" ...

  9. 谈谈 char *num="123";和char num[4]="123";的区别

    最近写程序的时候发现这样一个问题 #include<iostream> #include <string.h> using namespace std; void revers ...

随机推荐

  1. 洛谷 P1458 顺序的分数 Ordered Fractions

    P1458 顺序的分数 Ordered Fractions 题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1, ...

  2. [Angular] HttpParams

    It is possible to use HttpParams to set http params. For example we have this url to make: https://a ...

  3. 多线程在python中的使用 thread

    近期想学习研究一下python中使用多线程,来提高python在爬虫项目中的效率. 如今我们在网页上查询到在python中使用的多线程的使用大多数都是使用的threading模块,可是python中另 ...

  4. angular 响应式自定义表单控件—注册头像实例

    1. 组件继承ControlValueAccessor,ControlValueAccessor接口需要实现三个必选方法 writeValue() 用于向元素中写入值,获取表单的元素的元素值 regi ...

  5. 【Codeforces Round #445 (Div. 2) D】Restoration of string

    [链接] 我是链接,点我呀:) [题意] 给你n个字符串. 让你构造一个字符串s. 使得这n个字符串. 每个字符串都是s的子串. 且都是出现次数最多的子串. 要求s的长度最短,且s的字典序最小. [题 ...

  6. 小米R2D samba共享配置

    编辑samba配置文件 vi /etc/config/samba 需要注意的是,samba有自己的配置文件 /etc/samba/smb.conf,但是修改这个文件是不生效的,这个配置文件会在重启路由 ...

  7. js闭包中的this(匿名函数中的this指向的是windows)

    js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的thi ...

  8. 9.4 Binder系统_驱动情景分析_服务使用过程

    5. 服务使用过程 test_client进程: 用户态: (1)已结获得了“hello”服务,handle=1; (2)构造数据:code(那个函数)和函数参数 (3)发送ioctl后进入内核态,先 ...

  9. c++读取lua配置基础类

    一.内容介绍 把lua作为配置文件,里面的参数值的获取,在他人基础上做了修改,并且补充了一维数组的处理方式. 若有不足之处请多多指教. 对于二维数组,没有成功.希望大家继续补充和修改,非常感谢! 二. ...

  10. 【例题 6-7 UVA - 122 】Trees on the level

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二叉树的话,直接用数组存就好了. 写个bfs记录一下答案. [代码] #include <bits/stdc++.h> ...