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 9
– 4
= 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
1
≤N
≤10
^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]; } }