Pregunta del día----P4715 Knockout (4.15)
Enlace a tema: P4715 [Shenji 16. Ejemplo 1] Knockout
Esta pregunta es una pregunta de simulación un poco más complicada. Es necesario averiguar qué grupo de cada grupo ha avanzado cada vez, y también debe guardar su valor de habilidad y número de serie al mismo tiempo, por lo que es necesario crear un auxiliar. clase
Node
Utilizo una matriz para registrar todas las promociones, la puntuación [0] representa la entrada que acabo de leer, la puntuación [1] representa la situación después de la primera ronda, y así sucesivamente, luego la puntuación [n-1] representa la última En el caso de rondas, el que tiene el valor de habilidad más pequeño es la respuesta que necesitamos
Para el ejemplo dado en el título, el valor medio de la matriz es el siguiente (aquí solo se escribe el valor de la habilidad y también se requiere el número de serie del país)
package cn.edu.xjtu.daily.April.day_4_15;
import java.util.Scanner;
/**
* @author Hydrion-QLz
* @date 2022-04-15 9:20
* @description P4715 【深基16.例1】淘汰赛 https://www.luogu.com.cn/problem/P4715
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int num = (int) Math.pow(2, n);
// 读取输入
Node[][] score = new Node[n + 1][num];
for (int i = 0; i < num; i++) {
int ability = sc.nextInt();
score[0][i] = new Node(i + 1, ability);
}
// 数据处理
for (int i = 1; i < n; i++) {
int idx = 0;
int end = (int) Math.pow(2, n - i + 1);
for (int j = 0; j < end; j += 2) {
// 获得晋级结点
score[i][idx] = getMax(score[i - 1][j], score[i - 1][j + 1]);
// 继续看下一组
idx++;
}
}
// 输出最后一轮能力比较低的国家的序号
System.out.println(score[n - 1][1].ability > score[n - 1][0].ability ? score[n - 1][0].number : score[n - 1][1].number);
}
/**
* 获得两个结点中晋级的结点
*
* @param node1
* @param node2
* @return
*/
private static Node getMax(Node node1, Node node2) {
return node1.ability > node2.ability ? node1 : node2;
}
}
class Node {
int number;
int ability;
public Node(int number, int ability) {
this.number = number;
this.ability = ability;
}
}