fbpx

Problema #2298 – magnitudine – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

În această problemă veţi primi două numere natural N, şi K. Definim magnitudinea unui număr ca fiind diferenţa dintre cifra maximă şi cifra minimă ale lui. De exemplu, magnitudinea lui 9748 este 94 = 5.

Eliminaţi maxim K cifre din numărul N, astfel încât magnitudinea numărului obţinut să fie cât mai mică.

Date de intrare

În fișierul magnitudine.in se află pe prima linie numerele N si K separate prin spaţii.

Date de ieșire

Afișați în fișierul magnitudine.out magnitudinea minimă care se poate obţine după eliminarea a K cifre ale lui N.

Restricții și precizări

  • 1N10 ^ 18
  • pentru teste în valoare de 30 puncte, K = 0
  • pentru teste în valoare de 30 puncte, K = 1
  • pentru teste în valoare de 40 puncte, K = 2

Exemplu 1:

magnitudine.in

9748 1

magnitudine.out

2

Explicație

Daca eliminam cifra 4 obtinem 978 cu magnitudine = 2.

Exemplu 2:

magnitudine.in

90021 1

magnitudine.out

2

Explicație

Daca eliminam cifra 9 obtinem 0021 cu magnitudine = 2.

#include <bits/stdc++.h>

using namespace std;

ifstream cin("magnitudine.in");
ofstream cout("magnitudine.out");

int main()
{
    long long int n , k;
    cin >> n >> k;
    long long int p = 0;
    int a[22];
    while(n)
    {
        a[p]=n%10;
        n/=10;
        p++;
    }
    sort(a , a+p);
    if(k==0)
        cout << a[p-1]-a[0];
    else if(k==1)
    {
        if(a[p-2]-a[0] <= a[p-1]-a[1])
            cout << a[p-2]-a[0];
        else
            cout << a[p-1]-a[1];
        }
    else
    {
        if(a[p-3]-a[0] <= a[p-1]-a[2] && a[p-3]-a[0] <= a[p-2]-a[1])
            cout << a[p-3]-a[0];
        else if(a[p-1]-a[2] <= a[p-3]-a[0] && a[p-1]-a[2] <= a[p-2]-a[1])
            cout << a[p-1]-a[2];
        else
            cout << a[p-2]-a[1];
    }
}
Comentarii

S-ar putea sa iti placa