比赛的冠亚季军
比赛的冠亚季军
标题:比赛的冠亚季军 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
有N(3<=N<10000)个运动员,他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮;实力值大的获胜,实力值相等的情况,id小的情况下获胜;,轮空的直接进入下一轮.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[]s = scan.nextLine().split(" ");
scan.close();
int[] ability = Arrays.stream(s).mapToInt(Integer::valueOf).toArray(), ids = new int[ability.length];
for (int i = 0; i < ids.length; i++) {
ids[i] = i;
}
if (ability.length == 3) {
while (true) {
boolean guard = false;
for (int i = 0; i < ability.length-1; i++) {
if (ability[i] < ability[i+1]) {
int tmp = ability[i];
ability[i] = ability[i+1];
ability[i+1] = tmp;
tmp = ids[i];
ids[i] = ids[i+1];
ids[i+1] = tmp;
guard = true;
}
}
if (!guard) {
break;
}
}
System.out.println(String.join(" ", Arrays.stream(getRes(ability, ids)).mapToObj(String::valueOf).toArray(String[]::new)));
System.out.println(String.join(" ", Arrays.stream(getRes(ability, ids)).mapToObj(String::valueOf).toArray(String[]::new)));
System.out.println(String.join(" ", Arrays.stream(getRes(ability, ids)).mapToObj(String::valueOf).toArray(String[]::new)));
return;
}
while (ability.length > 4) {
int length = (int)Math.ceil((double)ability.length/2);
int[] abilityTmp = new int[length], idsTmp = new int[length];
if (ability.length % 2 == 1) {
abilityTmp[length-1] = ability[ability.length-1];
idsTmp[length-1] = ids[ids.length-1];
length--;
}
for (int i = 0; i < length; i++) {
if (ability[i*2] >= ability[i*2+1]) {
abilityTmp[i] = ability[i*2];
idsTmp[i] = ids[i*2];
} else {
abilityTmp[i] = ability[i*2+1];
idsTmp[i] = ids[i*2+1];
}
}
ability = abilityTmp;
ids = idsTmp;
}
System.out.println(String.join(" ", Arrays.stream(getRes(ability, ids)).mapToObj(String::valueOf).toArray(String[]::new)));
}
static int[] getRes(int[] ability, int[] ids) {
if (ability.length == 3){
while (true) {
boolean guard = false;
for (int i = 0; i < ability.length-1; i++) {
if (ability[i] < ability[i+1]) {
int tmp = ability[i];
ability[i] = ability[i+1];
ability[i+1] = tmp;
tmp = ids[i];
ids[i] = ids[i+1];
ids[i+1] = tmp;
guard = true;
}
}
if (!guard) {
break;
}
}
return ids;
} else if (ability.length == 4){
int[] indexWin = new int[2], indexLoss = new int[2], res = new int[3];
for (int i = 0; i < ability.length / 2; i++) {
if (ability[i*2] >= ability[i*2+1]) {
indexWin[i] = i*2;
indexLoss[i] = i*2+1;
} else {
indexWin[i] = i*2+1;
indexLoss[i] = i*2;
}
}
if (ability[indexWin[0]] >= ability[indexWin[1]]) {
res[0] = ids[indexWin[0]];
res[1] = ids[indexWin[1]];
} else {
res[0] = ids[indexWin[1]];
res[1] = ids[indexWin[0]];
}
if (ability[indexLoss[0]] >= ability[indexLoss[1]]) {
res[2] = ids[indexLoss[0]];
} else {
res[2] = ids[indexLoss[1]];
}
return res;
}
return null;
}
}
提示 订阅专刊 全部评论 推荐最新楼层 暂无评论,快来抢首评~