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%⌋ |
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):
For each test case, output N lines. Each line contains a string represents the level of the i-th member.
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
LV3 LV2 LV2 LV1 LV2
只要知道每个等级有几个人即可
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <queue> #include <algorithm> #include <stack> using namespace std; struct node { int id,y,m,d,val; int lv,no; } a[2005]; int cmp(node a,node b) { if(a.val!=b.val) return a.val>b.val; if(a.y!=b.y) return a.y<b.y; if(a.m!=b.m) return a.m<b.y; if(a.d!=b.d) return a.d<b.d; return a.id<b.id; } int cmp2(node a,node b) { return a.no<b.no; } int main() { int t,n,i; int l3,l4,l5,l6; cin >> t; while(t--) { cin >> n; int cnt = 0; for(i = 0; i<n; i++) { scanf("%d %d/%d/%d %d",&a[i].id,&a[i].y,&a[i].m,&a[i].d,&a[i].val); a[i].no = i; if(a[i].val>0) cnt++; } l3 = cnt*0.3; l4 = cnt*0.2; l5 = cnt*0.07; l6 = cnt*0.03; sort(a,a+n,cmp); for(i = 0; i<n; i++) { if(!a[i].val) a[i].lv = 1; else if(l6) { a[i].lv = 6; l6--; } else if(l5) { a[i].lv = 5; l5--; } else if(l4) { a[i].lv = 4; l4--; } else if(l3) { a[i].lv = 3; l3--; } else a[i].lv = 2; } sort(a,a+n,cmp2); for(i = 0; i<n; i++) printf("LV%d\n",a[i].lv); } return 0; }