El lenguaje C no cubre AC&& desordenado yyy/segmento de línea este verano (algoritmo codicioso)

No hay aire acondicionado este verano

"¿No habrá aire acondicionado este verano?"
"Sí". "
¿Entonces qué estás haciendo?"
"¡Mirando la Copa del Mundo, idiota!" "
@#$%^&*%…"

De hecho, se acerca la Copa del Mundo y también se acerca el festival de los fanáticos, se estima que muchos miembros de ACM abandonarán la computadora y correrán hacia la televisión.
Como aficionado, debes ver tantos partidos completos como sea posible, por supuesto, como buen joven de la nueva era, definitivamente verás algunos otros programas, como los noticieros (nunca olvides preocuparte por los asuntos nacionales), muy 6+7, Super Girls y "Happy Dictionary" de Wang Xiaoya, etc., suponiendo que ya conozca el horario de transmisión de todos los programas de televisión que le gusta ver, ¿hará arreglos razonables? (El objetivo es ver tantos programas completos como sea posible)
Entrada
Los datos de entrada contienen múltiples casos de prueba, y la primera línea de cada caso de prueba es solo un número entero n(n<=100) , que indica el número total de programas que le gustan Para mirar, y luego n líneas de datos, cada línea incluye dos datos Ti_s, Ti_e (1 <= i <= n), que representan la hora 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 finalizó y no se realizó ningún procesamiento.
Salida
Para cada instancia de prueba, genere la cantidad de programas de TV que se pueden ver por completo, y la salida de cada instancia de prueba ocupa una línea.

Sample Input
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
Sample Output
5

El objetivo es ver tantos programas completos como sea posible.Por lo tanto, cada vez que seleccionamos un programa, elegimos el programa más temprano que cumpla con las condiciones (un programa que se completa temprano debe comenzar temprano).

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    int n, i, j;
    int t;
    int time, count ;
    int a[101], b[101] ;
    while(scanf("%d", &n) != EOF && n != 0)
    {
    
    
        for (i = 0; i < n; i++)
        {
    
    
        scanf("%d%d", &a[i], &b[i]) ;
         }
       //按找完成时间早的顺序进行排序
        for (i = 0; i < n; i++)
            for (j = i + 1; j < n; j++)
            {
    
    
                if (b[i] > b[j])
                {
    
    
                    t = b[j] ;
                    b[j] = b[i] ;
                    b[i] =t ;
                    t = a[j];
                    a[j] = a[i] ;
                    a[i] = t ;
                }
           }
            time = 0,cnt = 0;
            for (i = 0; i < n; i++)
            {
    
    
                if (a[i] >= time)
                {
    
    
                    cnt++ ;         
                    time = b[i] ;
                }
            }
            printf("%d\n", cnt) ;  
    }
    return 0 ;
}

desordenado yyy / cobertura de línea

Antecedentes del tema
Ya casi es la noche, ¡yyy está muy nervioso!

Descripción del título
Ahora hay nn competiciones en cada DO principal, y se conocen los puntos de inicio y finalización de cada competición.
yyy cree que cuantas más competiciones participes, mejor saldrás en la prueba noip (falso).
Entonces, se preguntó cuántos juegos podría jugar como máximo.
Como yyy es konjac, si quieres participar en una competición debes empezar y terminar bien, y no puedes participar en 2 o más competiciones al mismo tiempo.
Entrada
La primera línea es un número entero nn, y cada una de las siguientes n líneas son 2 números enteros, lo que indica la hora de inicio y finalización del juego.
Salida
Un número máximo entero de juegos en los que participar.

输入 
3
0 2
2 4
1 3
输出 
2

inserte la descripción de la imagen aquí
Después de la observación, encontraremos que las ideas de estas dos preguntas son las mismas, pero la extensión de datos de la segunda pregunta es obviamente mucho mayor que la de la primera pregunta. En este momento, no podemos usar bucles dobles para ordenar la matriz. y podemos utilizar algo de Computación compleja en el tiempo con algoritmos de clasificación de bajo grado para cumplir con los requisitos de tiempo.
He utilizado la clasificación rápida aquí y el AC ha tenido éxito.

#include<stdio.h>
void qsort(int a[], int left, int right, int b[]){
    
    
	if(left > right){
    
    
		return ;
	}
	int temp = a[left], t2 = b[left];
	int i = left, j = right;
	while(i != j){
    
    
		while(a[j] >= temp && j > i){
    
    
			j-- ;
		}
		while(a[i] <= temp && j > i){
    
    
			i++ ;
		}
		if(i < j){
    
    
			int t = a[i];
			a[i] = a[j];
			a[j] = t;
			t = b[i];
			b[i] = b[j];
			b[j] = t;
		}
	}
	a[left] = a[i], b[left] = b[i];
	a[i] = temp, b[i] = t2;
	qsort(a, left, i - 1, b);
	qsort(a, i + 1, right, b);
}
int main()
{
    
    
	int  n;
	scanf("%d", &n);
	int  a[n], b[n];
	for(int  i = 0; i < n; i++ ){
    
    
		scanf("%d%d", &a[i], &b[i]);
	}
	qsort(b, 0 , n - 1, a);
	int  time = 0, cnt = 0;
	for(int  i = 0; i < n; i++){
    
    
		if(a[i] >= time){
    
    
			cnt++ ;
			time = b[i];
		}
	}
	printf("%d", cnt);
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/The_onion/article/details/121873090
Recomendado
Clasificación