博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Water~

Posted on 2011-03-19 22:55  ¥忘%风  阅读(181)  评论(0编辑  收藏  举报

很久没写题了,在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();
}
}
}