# PBinfo #3677 – cifrevecine – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Se dau două numere naturale n și k. Determinați cea mai mare valoare care se poate obține eliminând din numărul n exact k cifre aflate pe poziții alăturate(una după alta).

Date de intrare
Fișierul de intrare va conține pe prima linie numărul n și pe a doua linie nunărul k.

Date de ieșire
În fișierul de ieșire se va scrie pe prima linie valoarea cerută.

Restricții și precizări

n este un număr cuprins între 10 și 1017 inclusiv.
1 ≤ k < numărul de cifre ale lui n.
pentru 50 de puncte k este 1.

Exemplul 1:
cifrevecine.in

10002
3
cifrevecine.out

12
Exemplul 2:
cifrevecine.in

1938
2
cifrevecine.out

38

## Cod sursă C++

```cpp
/* Bogdan Iordache
 * O(nr cifre)
 */
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifndef LOCAL
    ifstream cin("cifrevecine.in");
    ofstream cout("cifrevecine.out");
#endif
    long long n;
    int k;
    cin >> n >> k;
    assert(1 <= n && n <= 100000000000000000LL);
    vector<long long> pw10;
    pw10.push_back(1);
    while (pw10.back() * 10 <= n) pw10.push_back(pw10.back() * 10);
    assert(0 <= k && k < (int)pw10.size());
    long long best = 0;
    for (int i = 0, j = (int)pw10.size() - k; j >= 0; ++i, --j) {
        long long val;
        if (i)
            val = n / pw10[j + k];
        else
            val = 0;
        val = val * pw10[j] + (n % pw10[j]);
        best = max(best, val);
    }
    cout << best << '\n';
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3677)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3677/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3677/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
