游客 Signup | Login
中文 | En

1705 - 中国好OJ

通过次数

0

提交次数

0

Time Limit : 1 秒 Memory Limit : 32 MB

ACM俱乐部是一个非常好的平台,每个学校都可以来申请拥有属于自己的OJ,并且实现了题目共享和出售,使题目资源不足的问题在很大程度上得到了改善。
作为一个OJ,排名系统是一定要有的。假设ACM俱乐部对用户的排名规则如下:
先按照分数从高到低排序,如果分数一样,则按照AC题目数从多到少排序,如果AC题目数也一样,则按照用户名缩写的字典序排序,如果用户名缩写字典序也相同,则按照用户名的字典序排序。
用户名由若干单词组成,每个单词只包含小写英文字母,且由至少一个英文字母组成,单词之间由一个空格分隔。
用户名的缩写由每个单词首字母组成,例如“tian qin”的缩写是“tq”。
按照用户名字典序进行排序时,用户名中的空格应忽略,例如应将“tian qin”转换成“tianqin”,再进行排序。

Input

输入包含多组测试数据。
每组输入的第一行是一个整数N(0<=N<=100),表示用户数量。当N=0时,输入结束。
接下来N行,每行先输入两个整数a和b(0<=a,b<=1000),a表示分数,b表示AC题数,然后在同一行输入一个字符串s,表示用户名,s的长度不大于15。a,b,s三者由一个空格分隔。
输入数据保证不会出现用户名相同的情况,也不会出现a!=0,而b=0的情况。

Output

对于每组输入,输出排好序的用户信息,一个用户信息占一行,格式与输入时一致。相邻两组输出之间空一行。

Examples

Input Format

2
98 45 tian qin
100 40 acm club
3
88 50 tian qin
88 45 acm club
88 50 tai qiu
0

Output Format

100 40 acm club
98 45 tian qin

88 50 tai qiu
88 50 tian qin
88 45 acm club

Solution C++

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

struct USER {
	int score;
	int ac;
	char name[16];
	char name1[16];
	char suoxie[16];
} user[100];

bool cmp(USER a, USER b) {
	if (a.score == b.score) {
		if (a.ac == b.ac) {
			if (!strcmp(a.suoxie, b.suoxie))
				return strcmp(a.name1, b.name1) < 0 ? 1 : 0;
			return strcmp(a.suoxie, b.suoxie) < 0 ? 1 : 0;
		}
		return a.ac > b.ac;
	}
	return a.score > b.score;
}

int main() {
	int n, a, b, i, k, c = 0;
	char s[16], *p;
	while (scanf("%d", &n) != EOF, n) {
		for (i = 0; i < n; i++) {
			scanf("%d%d%*c", &user[i].score, &user[i].ac);
			gets(s);
			strcpy(user[i].name, s);
			strcpy(user[i].name1, "\0");
			p = strtok(s, " ");
			k = 0;
			while (p) {
				strcat(user[i].name1, p);
				user[i].suoxie[k++] = *p;
				p = strtok(NULL," ");
			}
			user[i].suoxie[k] = '\0';
		}
		sort(user, user + n, cmp);
		if (c++)
			puts("");
		for (i = 0; i < n; i++)
			printf("%d %d %s\n", user[i].score, user[i].ac, user[i].name);
	}
	return 0;
}

Solution Java

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    private static ArrayList<Person> persons=new ArrayList<>();
    public static String suoxie;
    public static String name;
    public static String name1;
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		String totalsString=scanner.nextLine();
		int total=Integer.parseInt(totalsString);
		while(total!=0)
		{   
			while(total--!=0)
		  {
			  suoxie="";
		      name="";
		      name1="";
			  String tempString=scanner.nextLine();
			  String buffer[]=tempString.split(" ");
			 for(int i=2;i<buffer.length;i++)
			 {
				 suoxie+=buffer[i].charAt(0);
				 name+=buffer[i];
				 name1+=" "+buffer[i];
			 }
			 Person person=new Person(Integer.parseInt(buffer[0]), Integer.parseInt(buffer[1]), suoxie, name,name1);
			 persons.add(person);
		 }
			sort();
			printPerson(persons);
			persons.clear();
			total=Integer.parseInt(scanner.nextLine());
		}
	
	}
   private static void printPerson(ArrayList<Person> persons) {
		   for(int j=0;j<persons.size();j++)
		   {
			   Person person=persons.get(j); 
			   System.out.println(person.score+" "+person.acNum+person.name1);
		   }
		   System.out.println();
		
	}
public static void sort(){
	   Collections.sort(persons, new Comparator<Person>() {
			@Override
			public int compare(Person o1, Person o2) {
				if(o1.score==o2.score)
				{
					if(o1.acNum==o2.acNum)
					{
						if(o1.suoxie.equals(o2.suoxie))
						{
							return o1.name.compareTo(o2.name);
						}
						return o1.suoxie.compareTo(o2.suoxie);
					}
					return o1.acNum<o2.acNum?1:-1;
				}
				return o1.score<o2.score?1:-1;
			}
		});

   }
}
class Person{
	public int score;
	public int acNum;
	public String suoxie;
	public String name;
	public String name1;
	public Person(int score, int acNum, String suoxie, String name, String name1) {
		super();
		this.score = score;
		this.acNum = acNum;
		this.suoxie = suoxie;
		this.name = name;
		this.name1 = name1;
	}

	
	
}