Situatie
Din fisierul pp.in se citeste un numar n (<=1000000) si apoi un sir de n numere naturale reprezentand o permutare a multimii {1,2,3,…n}.
Afisati in fisierul pp.out cate dintre prefixele sirului citit sunt la randul lor permutari.
Exemplu:
pp.in
12
2 1 7 3 4 5 8 6 9 12 10 11
pp.out
4
Explicatie:
Cele patru permutari prefix sunt:
2 1
2 1 7 3 4 5 8 6
2 1 7 3 4 5 8 6 9
2 1 7 3 4 5 8 6 9 12 10 11
Solutie
<code='c++'>#include <fstream> using namespace std; ifstream fin("pp.in"); ofstream fout("pp.out"); int n,x,s=0,k=0; int main() { fin>>n; for(int i=1;i<=n;i++) { fin>>x; s=s+x;//fac suma pana la i if(s==i*(i+1)/2) //daca e suma de 1+2+..+i, atunci e prefix permutare k++; } fout<<k; return 0; } //OBS: Problema se poate rezolva si retinand valoarea maxima pana la fiecare pozitie.</code='c++'>
Leave A Comment?