Pregunta del día----P4715 Knockout (4.15)

Pregunta del día----P4715 Knockout (4.15)

Enlace a tema: P4715 [Shenji 16. Ejemplo 1] Knockout

imagen-20220415095425863

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. claseNode

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)

imagen-20220415095749466

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;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_46311811/article/details/124188315
Recomendado
Clasificación