# PBinfo #4581 – kpower – Rezolvare C++

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

## Enunț

Un număr natural se numește kpower dacă este putere a numărului natural k. O secvență kpower este un subşir de numere kpower care apar pe poziţii consecutive într-un şir.

Cerințe
Fiind dat un un număr natural k și un şir de n numere naturale, scrieți un program care rezolvă următoarele cerințe:
1.	Determină cel mai mare număr kpower dintre cele n numere date.
2.	Determină lungimea maximă a unei secvențe kpower.
3.	Determină cea mai mare sumă ce se poate obține adunând numerele dintr-o secvență kpower de lungime maximă.

Date de intrare
Fișierul de intrare kpower.in conține pe prima linie numărul C reprezentând cerința (1, 2 sau 3), pe a doua linie numerele k și n, iar  pe a treia linie un șir de n numere, numerele de pe aceeași linie fiind separate prin câte un spațiu.

Date de ieșire
Dacă cerința C = 1, atunci pe prima linie a fişierului de ieşire kpower.out se va scrie cel mai mare număr kpower găsit.
Dacă cerința C = 2, atunci pe prima linie a fişierului de ieşire kpower.out se va scrie lungimea maximă a unei secvențe kpower.
Dacă cerința C = 3, atunci pe prima linie a fişierului de ieşire kpower.out se va scrie suma maximă a unei secvențe kpower de lungime maximă.

Restricții și precizări

0 < k ≤ 9
1 ≤ n ≤ 1.000.000
cele n numere citite sunt din intervalul [0, 1012]
pentru toate datele de test, există cel puțin un număr kpower printre cele n numere
pentru teste valorând 20 de puncte cerinţa va fi C = 1
pentru teste valorând 30 de puncte cerinţa va fi C = 2
pentru teste valorând 40 de puncte cerinţa va fi C = 3

Exemplul 1:
kpower.in

1
3 19
1 27 9 17 21 3 1 27 3 9 81 78 56 1 3 9 1 81 9
kpower.out

81
Explicație
k este 3, iar cel mai mare număr din șir care este putere a lui 3 este 81.

Exemplul 2:
kpower.in

2
3 19
1 27 9 17 21 3 1 27 3 9 81 78 56 1 3 9 1 81 9
kpower.out

6
Explicație
Secvențele kpower sunt cele subliniate. Lungimea maximă a unei secvențe kpower este 6.

Exemplul 3:
kpower.in

3
3 19
1 27 9 17 21 3 1 27 3 9 81 78 56 1 3 9 1 81 9
kpower.out

124
Explicație
Dintre cele două secvențe kpower de lungime maximă, cea dintâi are suma numerelor maximă: 3 + 1 + 27 + 3 + 9 + 81 = 124.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream fin("kpower.in");
ofstream fout("kpower.out");
int cer,k,n,i,lc,lmax;
unsigned long long x,mx,sc,smax;
bool kpower(unsigned long long x)
{
    if(x==0) return 0;
    if(x==1) return 1;
    while(x%k==0)
        x=x/k;
    if(x==1) return 1;
    else return 0;
}
int main()
{
    fin>>cer;
    fin>>k>>n;
    ///cerinta 1
    if(cer==1)
    {
        for(i=1; i<=n; i++)
        {
            fin>>x;
            if (kpower(x))
                if(x>mx) mx=x;
        }
        fout<<mx<<'\n';
    }
    ///cerinta 2
    if(cer==2)
    {
        for(i=1; i<=n; i++)
        {
            fin>>x;
            if (kpower(x))
                lc++;
            else
            {
                if(lc>lmax)lmax=lc;
                lc=0;
            }
        }
        if(lc>lmax)lmax=lc;
        fout<<lmax<<'\n';
    }
    ///cerinta 3
    if(cer==3)
    {
        for(i=1; i<=n; i++)
        {
            fin>>x;
            if (kpower(x))
            {
                lc++;
                sc+=x;
            }
            else
            {
                if(lc>lmax || lc==lmax && sc>smax)
                {
                    lmax=lc;
                    smax=sc;
                }
                lc=0;
                sc=0;
            }
        }
        if(lc>lmax || lc==lmax && sc>smax)
        {
            lmax=lc;
            smax=sc;
        }
        fout<<smax<<'\n';
    }
    return 0;
}
```

## Resurse

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