Linguagem Luogu C++ | P2676 Estante B

Aprenda C++ desde tenra idade! Registre as perguntas feitas durante o processo de aprendizagem e preparação para o exame Luogu C++ e registre cada momento.

Em anexo está uma postagem resumida: A linguagem C++ de Luogu | Resumo_O blog de um comunicador que adora programar - blog CSDN


[Descrição do título]

O fazendeiro John adicionou recentemente uma enorme estante à biblioteca das vacas e, embora seja tão grande, é quase instantaneamente preenchida com todos os tipos de livros. Agora resta apenas um pouco de espaço no topo da estante.

Todas as  N (1≤ N ≤20.000) vacas têm uma certa altura  Hi (1≤ Hi ≤10.000). Deixe a soma das alturas de todas as vacas ser S. A altura da estante é B, e é garantido que 1≤ BS <2.000.000.007.

Para chegar ao topo da estante, que é mais alto que a vaca mais alta, as vacas tiveram que realizar acrobacias, umas sobre as costas das outras, formando uma “torre de vacas”. Claro, a altura desta torre é a soma das alturas de todas as vacas na torre. Para colocar algo em cima da estante, a soma das alturas de todas as vacas deve ser pelo menos a altura da estante.

Obviamente, quanto mais vacas na torre, mais instável será a torre inteira, então as vacas esperam manter o número de vacas na torre o menor possível e, ao mesmo tempo, alcançar o topo da estante. Agora, as vacas encontraram você e esperam que você possa ajudá-las a calcular esse número mínimo.

【digitar】

  • Linha 1: 2 inteiros separados por espaços: N  e  B ;
  • Linha 2... N +1:  A linha i +1 é um número inteiro: Hi .

【Saída】

  • Linha 1: Saída 1 inteiro, ou seja, o número mínimo de vacas que devem ser empilhadas em uma torre para chegar ao topo da estante.

【Amostra de entrada】

6 40
6
18
11
13
19
11

【Amostra de saída】

3

[Explicação detalhada do código]

#include <bits/stdc++.h>
using namespace std;
int n, b, ans=0, tmp=0, a[20005];
bool cmp(int l, int r) {
    return l>r;
}
int main()
{
    cin >> n >> b;
    for (int i=1; i<=n; i++) cin >> a[i];
    sort(a+1, a+n+1, cmp);
    while (tmp<b) {
        ans++;
        tmp+=a[ans];
    }
    cout << ans;
    return 0;
}

【resultado da operação】

6 40
6
18
11
13
19
11
3

Guess you like

Origin blog.csdn.net/guolianggsta/article/details/133344584