ZOJ-3770(Ranking System)

Few weeks ago, a famous software company has upgraded its instant messaging software. A ranking system was released for user groups. Each member of a group has a level placed near his nickname. The level shows the degree of activity of a member in the group.

Each member has a score based his behaviors in the group. The level is determined by this method:

Level Percentage The number of members in this level
LV1 / All members whose score is zero
LV2 / All members who can not reach level 3 or higher but has a positive score
LV3 30% ?(The number of members with a positive score) * 30%?
LV4 20% ?(The number of members with a positive score) * 20%?
LV5 7% ?(The number of members with a positive score) * 7%?
LV6 3% ?(The number of members with a positive score) * 3%?
  • ?x? is the maximum integer which is less than or equal to x.
  • The member with the higher score will get the higher level. If two members have the same score, the earlier one who joined the group will get the higher level. If there is still a tie, the user with smaller ID will get the higher level.

Please write a program to calculate the level for each member in a group.

Input

There are multiple test cases. The first line of input is an integer T indicating the number of test cases. For each test case:

The first line contains an integer N (1 <= N <= 2000) indicating the number of members in a group.

The next N lines, each line contains three parts (separated by a space):

  1. The ID of the i-th member Ai (0 <=Ai <= 1000000000). The ID of each member is unique.
  2. The date of the i-th member joined the group, in the format of YYYY/MM/DD. The date will be in the range of [1900/01/01, 2014/04/06].
  3. The score Si (0 <=
    Si
    <= 9999) of the i-th member.

Output

For each test case, output N lines. Each line contains a string represents the level of the i-th member.

Sample Input

1
5
123456 2011/03/11 308
123457 2011/03/12 308
333333 2012/03/18 4
555555 2014/02/11 0
278999 2011/03/18 308

Sample Output

LV3
LV2
LV2
LV1
LV2

一开始比赛的时候我没去做这道题,因为好像看起来很复杂的样子,而且竟然还有表格这种东西。

后来发现挺简单的,嗨,那就去A了,可是竟然一个小问题卡了我n久,而且是因为把小数点写成了‘,‘  导致一直WA,醉了,还是不够仔细啊。

题目的大致意思是:

叫你按照等级排序:

首先按照分数来排,若分数相同则按照时间来排,再其次则按照ID来排;

然后叫你输出每个人的LV是多少。

那么就相当于是一个三级排序的变式。毕竟只有6中level,所以把每一个等级的人数算出来然后依次排序就好了。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
	int x;	//保存了序号;
	int id;
	int yy,mm,dd;
	int s;
}a[2005];
bool cmp(node a,node b){
	if(a.s!=b.s)  return a.s>b.s;
	if(a.s==b.s){
		if(a.yy==b.yy && a.mm==b.mm)  return a.dd<b.dd;
		if(a.yy==b.yy)  return a.mm<b.mm;
		return a.yy<b.yy;
	}
	return a.id<b.id;
}
int main(){
	int T,n,sum,k,i,j;
	int f[2005];
	scanf("%d",&T);
	while(T--){
		memset(a,0,sizeof(a));   memset(f,0,sizeof(f));
		scanf("%d",&n);
		sum=0;
		for(i=1;i<=n;i++){
			scanf("%d %d/%d/%d %d",&a[i].id,&a[i].yy,&a[i].mm,&a[i].dd,&a[i].s);
			a[i].x=i;
			//sum是记录大于0的人数;
			if(a[i].s>0)  sum++;
		}
		int d6,d5,d4,d3;
		sort(a+1,a+1+n,cmp);
		d6=sum*0.03; d5=sum*0.07;  d4=sum*0.2;  d3=sum*0.3;
		for(i=1;i<=n;i++){
			if(!a[i].s)  f[a[i].x]=1;
			else if(d6)  {f[a[i].x]=6;  d6--; }
			else if(d5)  {f[a[i].x]=5;  d5--; }
			else if(d4)  {f[a[i].x]=4;  d4--; }
			else if(d3)  {f[a[i].x]=3;  d3--; }
			else   {f[a[i].x]=2;  }
		}
		for(i=1;i<=n;i++){
			printf("LV%d\n",f[i]);
		}
	}
}

另外,在我的验证下,那个id用字符串类型保存也是可以的,

并且在比较的时候直接写  a.id<b.id; 也是可以来判断的;

时间: 2024-11-25 19:30:29

ZOJ-3770(Ranking System)的相关文章

ZOJ 3629(找规律)

Treasure Hunt IV Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is exploring the wonderland, suddenly she fell into a hole, when she woke up, she found there are b - a + 1 treasures labled afrom b in front of her. Alice was very excited but

操作系统原理(三)——文件系统(File system)

文件系统(File system) 1. 文件 首先要说文件的定义,文件是进程创建的信息逻辑单元. 由于磁带和光盘的性能较低,磁盘使用的较多.这里讨论文件储存在磁盘中的情况.磁盘可被认为是固定块儿大小的线性序列. 在操作系统看来,文件就是一个个字节流,操作系统不管这个文件的内容(不管它是.mp3音频文件,或者.jpg图片文件,在应用程序看来才有这种区分).文件在操作系统眼中只有3种:普通文件.目录文件.特殊文件. 文件的命名: 在Linux中,文件名大小写敏感:目录分隔符“/”绝对不能出现在文件

斯坦福NG机器学习听课笔记-推荐系统(recommender system)

推荐系统(recommender system) Problem Formulation: RecommenderSystems:为什么讲它有两个原因:首先它是一个很重要的机器学习应用方向,在很多公司中占据了重要作用,像亚马逊之类网站都是很好的建立推荐系统促进商品销售.其次推荐系统有机器学习中一些big idea,通过学习推荐系统学习机器学习中的big idea.接着描述一个电影评级的例子(整篇博客都将以电影评级为实例). 电影评级有5级,打问号的是不知道的信息,推荐系统需要做的就是在已知数据上

十进制(decimal system)转换函数说明

一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo decbin(26); //输出 11010 decbin (PHP 3, PHP 4, PHP 5) decbin -- 十进制转换为二进制 说明 string decbin ( int number ) 返回一字符串,包含有给定 number 参数的二进制表示.所能转换的最大数值为十进制的 4294967295,其结果为

MySQL索引的三星评估(three-star system)

在<高性能MySQL>中文第三版提到了索引的评估:三星评估(three-star system). 在<High Performance MySQL (3rd Edition)>英文第三版的原文是: Lahdenmaki and Leach's book also introduces a three-star system for grading how suitable an index is for a query.The index earns one star if it

嵌入式(Embedded System)笔记 —— Cortex-M3 Introduction and Basics(上)

随着课内的学习,我想把每节课所学记录下来,以作查阅.以饲读者.由于我所上的是英文班课程,因此我将把关键术语的英文给出,甚至有些内容直接使用英文. 本次所介绍内容是关于Cortex-M3的基础内容. ------------------------------------------------------------------------------------------------------------------------------------------------ 1.什么是嵌

嵌入式(Embedded System)笔记 —— Cortex-M3 Introduction and Basics(下)

随着课内的学习,我想把每节课所学记录下来,以作查阅.以饲读者.由于我所上的是英文班课程,因此我将把关键术语的英文给出,甚至有些内容直接使用英文. 本次所介绍内容仍是关于Cortex-M3的基础内容,相对上一篇来说,介绍的内容更加具体和细致了. --------------------------------------------------------------------------------------------------------------------------------

构建系统(Build System)

构建系统(build system)是用来从源代码生成用户可以使用的目标(targets)的自动化工具. 目标可以包括库.可执行文件.或者生成的脚本等等. 常用的构建系统包括GNU Make.GNU autotools.CMake.Apache Ant(主要用于JAVA). 此外,所有的集成开发环境(IDE)比如Qt Creator.Microsoft Visual Studio和Eclipse都对他们支持的语言添加了自己的构建系统配置工具. 通常IDE中的构建系统只是基于控制台的构建系统(比如

2-5 事件系统(Event System)

重点 1.对于用户操作的事件,是由事件系统控制的 2.事件系统的动作是通过输入模块定义的 3.对于那个对象发生事件,由光线投射判定. 2-3-1 事件系统概要事件系统通过场景中的“Event System”对象所附加的组件发挥功能 Standalone Input Module(独立输入模块)组件是具有通过鼠标,键盘和游戏控制杆输入功能Touch Input Module(触摸输入模块)组件是具有智能手机和平板电脑等移动设备上触碰功能 现在2018.3.9f1版本中,Touch Input Mo