La segunda sesión de la revisión de Wisdom Cup del código Java (autismo)

诶,过去一天了,昨天真的让我知道了不能小看任何一道题(差点就爆零了!!)。
这里来复盘一下自己比赛的时候出现的错误

 (谁说传智杯简单的,我过去就是一脚

Prácticas en ingeniería de software:

Descripción del título:
El curso obligatorio de "Ingeniería de software" en una universidad se divide en partes teóricas y prácticas. La parte teórica es impartida por los profesores de la escuela; la parte práctica está dirigida por una empresa externa. Los estudiantes deben aprender HTML, CSS, JavaScript, Vue, Python, Django y otras tecnologías en cinco semanas, y formar un equipo para completar una verdadera Aplicaciones de negocios en Internet.
Hay n (0≤n≤1000) estudiantes que participan en este curso, divididos en no más de 26 equipos, cada equipo está representado por la A a la Z. Cada equipo completará un proyecto y puntuará a todos los equipos (incluido su propio equipo) en unidades de equipos. El rango es un número entero de 0 a 100.
Con el fin de calmar la insatisfacción de los estudiantes con los muchos problemas que surgen de este curso (como demasiado trabajo, demasiado tiempo, métodos de evaluación injustos, etc.), el maestro decidió utilizar una forma "justa" para determinar cada equipo Puntajes del proyecto:
para un equipo, primero calcule el promedio de todos los equipos (incluidos ellos mismos) que califican a este equipo, y luego elimine los puntajes que difieren de este promedio en más de 15 puntos (para asegurarse de que no se eliminen todos los puntajes) Situación), y finalmente promediar los puntajes restantes, redondeados y redondeados y utilizados como puntaje del proyecto del equipo.
Para cada estudiante, hemos aprendido su código de equipo y puntaje teórico (también un número entero de 0 a 100 puntos). El puntaje final del estudiante es el 60% del puntaje teórico más el 40% del puntaje del proyecto del equipo, y luego se redondea al total más cercano.
Ahora el profesor quiere saber el ranking de todos los alumnos. Indique el puntaje de cada compañero de clase y su equipo en el orden de puntaje alto a puntaje bajo.
Formato de entrada:
Inserte la descripción de la imagen aquí

Formato de salida:
Salida n líneas para indicar la respuesta. A los estudiantes con puntajes altos se les da prioridad a la salida . A los estudiantes con números de equipo más pequeños se les da prioridad a la salida cuando los puntajes son los mismos . Para cada línea, primero muestre la calificación del compañero de clase, luego escriba las letras mayúsculas que representan el número de su equipo.

Es fácil cometer errores:
(1) Primero recibí esta pregunta. Una pregunta tan larga me molesta mucho. También es porque participé en esta competencia formal por primera vez. Eh, un poco nervioso. Aún así, primero tenemos que ponernos Lee el tema cuidadosamente.
(2) El primer punto propenso a errores, cuando eliminamos el puntaje promedio, tenemos que redondearlo , y luego, cuando calculamos el puntaje de cada estudiante, ¡todavía tenemos que redondearlo !
(3) El segundo punto propenso a errores, creo que todos lo han visto, lo marqué arriba, cuando el puntaje es el mismo, se da prioridad al número del equipo con el número más pequeño . ! ! ! (Aquí estoy infinitamente WA mientras juego, y mis ojos están ciegos)
(4) El tercer punto de error es que cuando cada equipo anota, ¡no está diciendo que cada línea es la puntuación de este equipo! ¡Quiere decir que cada línea es una puntuación que cada equipo otorga a otros equipos! !
Por ejemplo:
70 90100
95 88 85
30 47100
La puntuación de A es: 70 95 30
La puntuación de B es: 90 88 47
y así sucesivamente, en lugar de decir cuál es la puntuación de A 70 90100. ! (Daño: date un largo recuerdo, esta pregunta se ha enviado mucho WA, y finalmente la mentalidad explotó, el juego se puede imaginar)
Finalmente, el código fue publicado:

package 传智杯第二届;
import java.util.*;
public class Test1 {
	static int n,k;
	static int a[][] = new int[30][30]; // 每个队伍互相打的分数
	static double avg[] = new double[30]; // 每个队伍平均分
	static double sum[] = new double[30]; // 每个队伍分数总和
	static int cnt[] = new int[30]; // 每个队伍现在有效得分次数
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		k = sc.nextInt();
		student stu[] = new student[n];
		for(int i = 0;i < n;i++){
			stu[i] = new student();
			stu[i].t = sc.nextInt();
			stu[i].no = sc.next().charAt(0);
		}
		for(int i = 0;i < k;i++){
			for(int j = 0;j < k;j++){
				a[j][i] = sc.nextInt();
				sum[j] += a[j][i]; // 每个队伍的成绩和
			}
		}
		for(int i = 0;i < k;i++)
			avg[i] = sum[i]/(double)k;
		Arrays.fill(cnt,k);
		for(int i = 0;i < k;i++)
			for(int j = 0;j < k;j++){
				if(Math.abs(avg[i]-(double)a[i][j]) > 15){
					sum[i] -= a[i][j];
					cnt[i]--;
				}
			}
		for(int i = 0;i < k;i++)
			avg[i] = (int)(sum[i]/(double)cnt[i]+0.5);
		for(int i = 0;i < n;i++)
			stu[i].t = (int)(stu[i].t*0.6+avg[stu[i].no-'A']*0.4+0.5);
		Arrays.sort(stu);
		for(int i = 0;i < n;i++)
			System.out.println(stu[i].t+" "+stu[i].no);
		sc.close();
	}
}
class student implements Comparable{
	int t;
	char no;
	public int compareTo(Object b){
		student a = (student)b;
		if(this.t < a.t)
			return 1;
		else if(this.t == a.t){
			if(this.no > a.no)
				return 1;
			else
				return -1;
		}
		else return -1;
	}
}

Día del programador

Descripción del tema:
Inserte la descripción de la imagen aquí
formato de entrada : formato de
Inserte la descripción de la imagen aquí
salida:
respuestas de salida, es decir, cuántas naranjas deben prepararse al menos.

Pensamiento incorrecto:
mi idea para esta pregunta es encontrar al estudiante con la calificación más baja y luego usarlo como el estándar para extenderse a los dos lados por separado. No sé si esto es completamente incorrecto.
Por supuesto, no hay nada de malo en la
muestra. Ejemplo:
5
3 4 5 4 3
salidas 9 // 1 2 3 2 1 Nada de malo.
Si la
idea es 6 1 9 7 6, entonces el número de naranjas dado es: 2 1 2 1 0 en
realidad apareció 0!

La idea correcta es:
(1) Supongamos primero que todos envían una naranja primero, porque todos deben recibir al menos una naranja
(2) Escanear de izquierda a derecha, y luego, si la puntuación de la derecha es mayor que la de la izquierda, no hace falta decirlo. El número de naranjas en la porción de una persona debe ser el de la izquierda + 1. No debemos juzgar que la derecha es más pequeña que la izquierda en este momento, porque esto puede causar un número negativo.
(3) Finalmente, escanee de derecha a izquierda. Si el lado izquierdo es más grande que el derecho, a [i-1] = max (a [i-1], a [i] +1) son iguales:
a [i-1] = max (a [i-1], a [i]) Creo que es bastante comprensible

Código:

package 传智杯第二届;
import java.io.*;
public class Test2 {
	static int n;
	static int a[] = new int[1000010];
	static int num[] = new int[1000010];
	public static void main(String[] args) throws IOException{
		StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));
		re.nextToken(); n = (int)re.nval;
		long ans = 0;
		for(int i = 1; i <= n;i++){
			re.nextToken();
			a[i] = (int)re.nval;
		}
		for(int i = 1;i < n;i++){
			if(a[i] < a[i+1])
				num[i+1] = num[i]+1;
			else if(a[i] == a[i+1])
				num[i+1] = num[i];
		}
		for(int i = n;i > 1;i--){
			if(a[i] < a[i-1])
				num[i-1] = Math.max(num[i-1],num[i]+1);
			else if(a[i] == a[i-1])
				num[i-1] = Math.max(num[i-1],num[i]);
		}
		for(int i = 1;i <= n;i++)
			ans += num[i];
		pr.println(ans+n);
		pr.flush();
	}
}

El número de ocurrencias del modo

Descripción del título:
Inserte la descripción de la imagen aquí
Formato de entrada : Formato de
Inserte la descripción de la imagen aquí
salida: En
Inserte la descripción de la imagen aquí
primer lugar, creo que esta pregunta puede ser la menor trampa de este conjunto de preguntas. El significado de la pregunta es simple y claro, pero esta pregunta aún examina el uso de Map. . Escuché que algunos peces gordos no usaron el Mapa, pero es dañino para mí. Este tipo de pollo asado solo puede
analizar el problema de esta manera :
(1) En primer lugar, esta clase tiene 1e6 compañeros, cada compañero puede tener 2 números, si nosotros Guarde estos en esta matriz , escriba aquí. Sé por qué no puede usar Map. . Soy estúpido, solo abra una matriz 2 * 1e6 y ordénelo para grabarlo.
(2) Porque cuando clasifiqué en ese momento, pensé en la fila del cubo. Cuando vi el número 1e9, pensé que la clasificación no funcionaría, eh, dbqwtcl.
(3) ¡Pero aún podemos usar el mapa para esta pregunta! Podemos almacenar cada número y el número de ocurrencias de cada número en forma de pares clave-valor, y luego la respuesta que necesitamos es la clave correspondiente al número con el mayor valor

Código:

package 传智杯第二届;
import java.io.*;
import java.util.*;
import java.util.Map.Entry;
public class Test3 {
	static int n;
	static int a[] = new int[1000010];
	static int b[] = new int[1000010];
	static HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
	public static void main(String[] args) throws IOException{
		StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));
		re.nextToken(); n = (int)re.nval;
		for(int i = 1;i <= n;i++){
			re.nextToken();
			a[i]  = (int)re.nval;
			re.nextToken();
			b[i] = (int)re.nval;
			b[i] = a[i]^b[i];
			map.put(a[i],0);
			map.put(b[i],0);
		}
		for(int i = 1;i <= n;i++){
			if(a[i] != b[i]){
				map.put(a[i],map.get(a[i])+1);
				map.put(b[i],map.get(b[i])+1);
			}
			else
				map.put(a[i],map.get(a[i])+1);
		}
		int k = 0;
		long ans = 0;
		for(Entry<Integer,Integer> entry : map.entrySet()){ // 这里可能比较关键 使用Entry可以很好很快速的返回每一个键值对的键与值
			if(entry.getValue() > ans){
				ans = entry.getValue();
				k = entry.getKey();
			}
			else if(entry.getValue() == ans && entry.getKey() < k)
				k = entry.getKey();
		}
		pr.println(k);
		pr.flush();
	}
}

Si alguien no conoce la lectura rápida y la salida rápida, consulte este blog. La
cuarta pregunta aún no está escrita.

32 artículos originales publicados · elogiados 5 · visitas 862

Supongo que te gusta

Origin blog.csdn.net/shizhuba/article/details/105465194
Recomendado
Clasificación