Blue Bridge Cup sprint veintisiete de 31 días [java]

Sal a jugar en vacaciones, haz menos. .

Sección 1: Revisión de preguntas reales anteriores que se han hecho antes

Sala de subexamen (Concurso Nacional 2017 - 25 de marzo)

https://www.lanqiao.cn/problems/109/learning/

Suma de cuatro cuadrados (16 años de ministerio ——11 de marzo)

https://www.lanqiao.cn/problems/122/learning/

Esta violencia directa

package daily;

import java.util.Scanner;

/**
 * http://lx.lanqiao.cn/problem.page?gpid=T2766
 * 
 * @author Jia
 *
 */
public class day3_11_3 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();

		for (int i = 0; i <= Math.sqrt(n); i++) {
    
    
			for (int j = i; j <= Math.sqrt(n - i * i); j++) {
    
    
				for (int k = j; k <= Math.sqrt(n - i * i - j * j); k++) {
    
    
					if (Math.sqrt(n - i * i - j * j - k * k) == (int) Math.sqrt(n - i * i - j * j - k * k)) {
    
    
						System.out.println(i + " " + j + " " + k + " " + (int) Math.sqrt(n - i * i - j * j - k * k));
						return;
					}
				}
			}
		}
	}
}

Peso Mínimo (Prov. 21 - 8 de Marzo)

https://www.lanqiao.cn/problems/1461/learning/

Esta sigue siendo esa fórmula, recuerda que se puede poner de los dos lados, si la olvidas vuelve atrás y búscala

package daily;

import java.util.Scanner;

public class day3_8_2 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		int range = 1; // 量程
		int res = 1; // 砝码数
		while (range < n) {
    
    
			range += (range + range + 1);
			res++;
		}
		System.out.println(res);
	}
}

Rango de tiempos K (17 años competencia provincial - 16 de marzo)

https://www.lanqiao.cn/problems/97/learning/

Sección 2: Practica hoy

Código de siete segmentos (competencia provincial de 20 años)

https://www.lanqiao.cn/problems/595/learning/

Uh, pensé que esta pregunta era bastante simple, así que la encontré de las manos directas y luego me rendí hhhh

Luego, la idea subyacente es registrar la relación de conexión de todos los bordes, luego enumerar todas las opciones posibles y luego juzgar si esta elección se puede establecer.

Si enumera todas las opciones, es el árbol de subconjunto del método de retroceso. Luego, debido a que el tamaño es diferente cada vez, debe encontrar el árbol de subconjunto con dfs varias veces y luego juzgar si se cumplen las condiciones después de alcanzar el tamaño requerido (de hecho, también puede Una vez bfs, juzgue cada vez que ingrese, pero no tengo ganas, es mejor escribir una plantilla directamente)

Luego etiquete cada borde de la siguiente manera para establecer una relación de conexión de borde de almacenamiento de matriz. Al juzgar si un subconjunto determinado cumple con las condiciones, es necesario ver cuántos puntos de conexión tienen estos bordes, por ejemplo, para 0, 1, 2, 3. Hay son 3 puntos de conexión, y si enumera algunos ejemplos más, encontrará que para n aristas, habrá al menos n-1 puntos de conexión, por lo que surge la relación entre cómo juzgar si el subconjunto satisface la condición (aquí es una especie de Excepciones, como 0,1,6,5 tienen 4 puntos de conexión, pero así se llama), además de esto, es necesario asegurarse de que cada borde tenga al menos una conexión con otros bordes En el código, uso set para juzgar

imagen-20220329220810884

Respuesta: 80

package year2020A;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

/**
 * http://oj.ecustacm.cn/problem.php?id=1511
 * 
 * @author Jia
 *
 */
public class exercise4 {
    
    
	static int[][] link = {
    
     {
    
     0, 1, 0, 0, 0, 1, 0 }, {
    
     1, 0, 1, 0, 0, 0, 1 }, {
    
     0, 1, 0, 1, 0, 0, 1 },
			{
    
     0, 0, 1, 0, 1, 0, 0 }, {
    
     0, 0, 0, 1, 0, 1, 1 }, {
    
     1, 0, 0, 0, 1, 0, 1 }, {
    
     0, 1, 1, 0, 1, 1, 0 }, };
	static int ans = 0;
	static int[] arr = {
    
     1, 2, 3, 4, 5, 6, 7 };
	static ArrayList<Integer> nums = new ArrayList<>();// 记录组合

	public static void main(String[] args) {
    
    
		for (int size = 1; size <= 7; size++) {
    
    
			dfs(size, 0);
		}
		System.out.println(ans);
	}

	/**
	 * 回溯法
	 * 
	 * @param size
	 * @param index
	 */
	private static void dfs(int size, int index) {
    
    
		if (nums.size() == size) {
    
    
			check();
		} else {
    
    
			for (int i = index; i < link.length; i++) {
    
    
				nums.add(i);
				dfs(size, i + 1);
				nums.remove(nums.size() - 1);
			}
		}
	}

	/**
	 * 判断这种选择是否满足条件
	 */
	private static void check() {
    
    
		int num = nums.size();
		Set<Integer> set = new HashSet<>();// 使用hashset是为了确保所有的边都和其他有相连
		for (int i = 0; i < nums.size() - 1; i++) {
    
    
			for (int j = i + 1; j < nums.size(); j++) {
    
    
				if (link[nums.get(i)][nums.get(j)] == 1) {
    
    
					num--;
					set.add(i);
					set.add(j);
				}
			}
		}
		// 节点剩余连接数小于1并且所有的边都相连着
		if (num <= 1 && (set.size() == nums.size() || nums.size() == 1)) {
    
    
			ans++;
		}
	}

}

Cambio de intervalo (Campeonato Nacional 2017)

https://www.lanqiao.cn/problems/111/learning/

Contando Cuadrados (Campeonato Nacional 2019)

https://www.lanqiao.cn/problems/245/learning/

Supongo que te gusta

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