很久没写题了,在hdoj分类中的water分类里找了道水题,顺便简单复习一下Java的排序。
贴下代码:
hdu 1084
import java.util.*;
class Rank implements Comparable<Rank> {
/*设计类的同时,实现Comparable接口,重写它compareTo方法,
* 以实现按规定的顺序排序。*/
int idx;
int cnt;
String ti;
int score;
public Rank(int idx, int cnt, String ti) {
this.idx = idx;
this.cnt = cnt;
this.ti = ti;
this.score = 50 + cnt * 10;
}
public int compareTo(Rank b) {
/*例:一般地,return this.cnt - b.cnt;为按cnt从小到大排序*/
Rank a = this;
if (a.cnt < b.cnt) {
return 1;
} else if (a.cnt == b.cnt) {
if (a.ti.compareTo(b.ti) < 0) {
return -1;
}
return 1;
} else {
return -1;
}
}
}
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
Rank[] rank = new Rank[110];
Rank[] ans = new Rank[110];
int nn[] = new int[110];
while (cin.hasNextInt()) {
int n = cin.nextInt();
if (n < 0) break;
Arrays.fill(nn, 0);
for (int i = 0; i < n; i++) {
int a = cin.nextInt();
String ti = cin.next();
rank[i] = new Rank(i, a, ti);
nn[a]++;
}
Arrays.sort(rank, 0, n);
for (int i = 0; i < n; i++) {
if (rank[i].cnt < 5 && rank[i].cnt > 0) {
int tt = i + nn[ rank[i].cnt ] / 2;
for (int j = i; j < tt; j++) {
rank[j].score += 5;
}
i += nn[ rank[i].cnt ] - 1;
}
}
for (int i = 0; i < n; i++)
ans[ rank[i].idx ] = rank[i];
for (int i = 0; i < n; i++)
System.out.println(ans[i].score);
System.out.println();
}
}
}