A linguagem C não AC&& bagunça a cobertura do segmento yyy/line neste verão (algoritmo ganancioso)

Sem AC neste verão

"Sem AC neste verão?"
"Sim."
"Então o que você está fazendo?"
"Assistindo a Copa do Mundo, idiota!"
"@#$%^&*%…"

Na verdade, a Copa do Mundo está chegando, e o festival de torcedores também está chegando. Estima-se que muitos ACMers abandonarão o computador e correrão para a TV.
Como torcedor, você deve assistir ao máximo de jogos completos possível. Claro, como um bom jovem na nova era, você com certeza assistirá a alguns outros programas, como noticiários (nunca se esqueça de se preocupar com os assuntos nacionais), muito 6 + 7, super Girls e "Happy Dictionary" de Wang Xiaoya, etc., supondo que você já conheça a programação de transmissão de todos os programas de TV que gosta de assistir, você tomará providências razoáveis? (O objetivo é assistir ao maior número possível de programas completos)
Entrada
Os dados de entrada contêm vários casos de teste. A primeira linha de cada caso de teste possui apenas um número inteiro n(n<=100) , indicando o número total de programas que você deseja watch e, em seguida, n linhas de dados, cada linha inclui dois dados Ti_s, Ti_e (1<=i<=n), que representam o horário de início e término do i-ésimo programa, respectivamente. Para simplificar o problema, cada o tempo é representado por um número inteiro positivo. n=0 significa que a entrada terminou e nenhum processamento foi feito.
Saída
Para cada instância de teste, produza o número de programas de TV que podem ser assistidos completamente, e a saída de cada instância de teste ocupa uma linha.

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

O objetivo é assistir ao máximo de shows completos possível, portanto, sempre que selecionamos um programa, escolhemos o programa mais antigo que atende às condições (um programa concluído antecipadamente deve começar antecipadamente).

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

bagunçado yyy / cobertura de linha

Contexto do tópico
Está quase noip, yyy está muito nervoso!

Descrição do título
Agora existem nn competições em cada OJ principal, e os horários de início e término de cada competição são conhecidos.
yyy acredita que quanto mais competições você participar, melhor você se sairá no teste noip (falso).
Então, ele se perguntou quantos jogos ele poderia jogar no máximo.
Como yyy é konjac, se quiser participar de uma competição, você deve começar e terminar bem, e não pode participar de 2 ou mais competições ao mesmo tempo.
Entrada
A primeira linha é um número inteiro nn, e cada uma das próximas n linhas são 2 números inteiros, indicando o horário de início e término do jogo.
Saída
Um número inteiro máximo de jogos dos quais participar.

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

insira a descrição da imagem aqui
Após observação, descobriremos que as ideias dessas duas questões são as mesmas, mas o intervalo de dados da segunda questão é obviamente muito maior do que o da primeira questão. Neste momento, não podemos usar loops duplos para classificar a matriz, e podemos usar alguma computação complexa no tempo com algoritmos de classificação de baixo grau para atender aos requisitos de tempo.
Usei a classificação rápida aqui e o AC foi bem-sucedido.

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

Acho que você gosta

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