Este verano no es AC (realización del lenguaje C)

Descripción del problema

"¿No soy AC este verano?"
"Sí". "
¿Qué estás haciendo?"
"¡Mira el Mundial, idiota!"
"@ # $% ^ & *% ..."

De hecho, el Mundial está aquí, el festival de los fanáticos También está llegando, se estima que muchos ACMers también dejarán la computadora e irán a la TV.
Como fanático, debe querer ver tantos juegos completos como sea posible. Por supuesto, como un buen joven en la nueva era, definitivamente verá otros programas, como la transmisión de noticias (nunca olvide preocuparse por los eventos nacionales), muy 6 + 7, super Girls, y el "Diccionario feliz" de Wang Xiaoya, etc., suponiendo que ya conozcan el horario de transmisión de todos los programas de televisión que les gusta ver, ¿harán arreglos razonables? (El objetivo es ver tantos programas completos como sea posible)

 

 

Entrada

Los datos de entrada contienen múltiples instancias de prueba. La primera línea de cada instancia de prueba tiene solo un número entero n (n <= 100), que indica el número total de programas que desea ver, luego n líneas de datos, cada línea incluye dos Ti_s de datos, Ti_e (1 <= i <= n) representa el tiempo de inicio y finalización del i-ésimo programa respectivamente. Para simplificar el problema, cada vez está representado por un número entero positivo. n = 0 significa que la entrada ha terminado y no se realiza ningún procesamiento.

 

 

Salida

Para cada instancia de prueba, se emite la cantidad de programas de TV que se pueden ver por completo, y la salida de cada instancia de prueba ocupa una línea.

 

 

Entrada de muestra

 

12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0

 

 

Salida de muestra

 

5 5

 

 

Autor

lcy

 

 

Fuente

Examen final de ACM (2006/06/07)

#include "stdio.h"

struct node {
	int t1;
	int t2;
};

int main() {
	struct node a[105], temp;
	int n, cnt = 1, i, k;						
	while (scanf("%d", &n) != EOF && n != 0) {
		for (i = 0; i < n; i++) {
			scanf("%d %d", &a[i].t1, &a[i].t2);
		}
		for (i = 0; i < n-1; i++) {				//冒泡排序   先按结束时间排序,在结束时间相等时,再按开始时间晚的排序 
			for (k = 0; k < n - 1; k++) { 		//想让在一定时间内看更多的节目,就需要看节目时间最短的节目 
				if (a[k].t2 > a[k+1].t2) {
					temp = a[k];
					a[k] = a[k+1];
					a[k+1] = temp;
				}
				if (a[k].t2 == a[k+1].t2) {
					if (a[k].t1 < a[k+1].t1) {
						temp = a[k];
						a[k] = a[k+1];
						a[k+1] = temp;
					}
				}
			}
		}
		int t = a[0].t2;
		for (i = 1; i < n; i++) { 			//下一个节目开始时间要在上一个节目结束时 
			if (a[i].t1 >= t) {
				cnt++;
				t = a[i].t2;
			}
		}
		printf("%d\n", cnt);
		cnt = 1;
	}

	return 0;
}

 

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
5
0

--------------------------------
Process exited after 1.603 seconds with return value 0
请按任意键继续. . .

 

Tema: Mira la mayoría de los programas en un tiempo limitado. Al principio, no hubo una consideración exhaustiva, pero el tiempo del programa que apareció primero se marcó con otra matriz. Si se intercala en el próximo período de tiempo, el programa no se puede ver por completo. Dado WA, el problema es que no se considera la solución óptima, que es el algoritmo codicioso.

Algoritmo: Algoritmo codicioso. Ordenar primero por hora de finalización, si hay la misma hora de finalización, continúe ordenando por la hora de inicio tarde (es decir, la duración más corta primero)

32 artículos originales publicados · elogiados 0 · visitas 475

Supongo que te gusta

Origin blog.csdn.net/geshifansheng_7/article/details/105066913
Recomendado
Clasificación