ZOJ 3770 Ranking System(排序)
来源:互联网 发布:好听淘宝名字大全 编辑:程序博客网 时间:2024/06/17 08:58
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:
- ⌊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.
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):
- The ID of the i-th member Ai (0 <= Ai <= 1000000000). The ID of each member is unique.
- 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].
- The score Si (0 <= Si <= 9999) of the i-th member.
For each test case, output N lines. Each line contains a string represents the level of the i-th member.
15123456 2011/03/11 308123457 2011/03/12 308333333 2012/03/18 4555555 2014/02/11 0278999 2011/03/18 308
LV3LV2LV2LV1LV2
题解:
很水的一道排序练习题,注意下百分百乘的数是分数为正数的数的数目
代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<map>#include<set>#include<stdlib.h>#include<cmath>#include<string>#include<algorithm>#include<iostream>#include<stdio.h>using namespace std;#define ll long longstruct node{ int id; int y,m,d; int s; int r;}a[2005];int b[2005];int cmp(node a,node b){ if(a.s!=b.s) { return a.s>b.s; } if(a.y!=b.y||a.m!=b.m||a.d!=b.d) { if(a.y!=b.y) { return a.y<b.y; } else { if(a.m!=b.m) { return a.m<b.m; } else { return a.d<b.d; } } } return a.id<b.id;}int main(){ int i,j,n,test,ans; while(scanf("%d",&test)!=EOF) { while(test--) { scanf("%d",&n); ans=0; for(i=1;i<=n;i++) { scanf("%d%d/%d/%d%d",&a[i].id,&a[i].y,&a[i].m,&a[i].d,&a[i].s); a[i].r=i; if(a[i].s>0) ans++; } sort(a+1,a+n+1,cmp); int a6=ans*0.03,a5=ans*0.07,a4=ans*0.2,a3=ans*0.3; for(i=1;i<=n;i++) { if(a6) { b[a[i].r]=6; a6--; } else if(a5) { b[a[i].r]=5; a5--; } else if(a4) { b[a[i].r]=4; a4--; } else if(a3) { b[a[i].r]=3; a3--; } else { if(a[i].s>0) b[a[i].r]=2; else b[a[i].r]=1; } } for(i=1;i<=n;i++) { printf("LV%d\n",b[i]); } } } return 0;}