1705 - 中国好OJ
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; } }