Cod sursa(job #1799710)

Utilizator dnprxDan Pracsiu dnprx Data 6 noiembrie 2016 17:58:32
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <bits/stdc++.h>

using namespace std;

/**
   Normalizez sirurile a[] si b[]
   Pentru ca sunt cel mult 100 de numere intre a si b,
   simulez adunarea lui a cu 1 pana ajung la b
*/

int a[10001], b[10001], v[10001];
int M, N, K;

void Citire()
{
    int i, x;
    ifstream fin("nextseq.in");
    fin >> K >> N >> M;
    for (i = 1; i <= K; ++i)
    {
        fin >> x;
        v[x] = 1;
    }
    x = 0;
    for (i = 0; i <= 10000; i++)
        if (v[i] == 1)
            v[i] = x++;
    /// acum v[i]=al catelea numar este i in sirul initial

    /// citire sirul a:
    for (i = 1; i <= N; ++i)
    {
        fin >> x;
        a[i] = v[x];
    }
    /// citire sirul b:
    for (i = 1; i <= M; ++i)
    {
        fin >> x;
        b[i] = v[x];
    }
    fin.close();
}

/// true daca a[] = b[]
bool Egale()
{
    int i;
    if (N != M) return false;
    for (i = 1; i <= N; ++i)
        if (a[i] != b[i]) return false;
    return true;
}

void Numara()
{
    int i, cnt;
    /// oglindesc a si b:
    for (i = 1; i <= N / 2; ++i)
        swap(a[i], a[N - i + 1]);
    for (i = 1; i <= M / 2; ++i)
        swap(b[i], b[M - i + 1]);
    cnt = 0;
    if (Egale()) cnt = 0;
    else
    {
        while (!Egale())
        {
            cnt++;
            for (i = 1; a[i] == K - 1; i++)
                a[i] = 0;
            a[i]++;
            if (i > N) {N++; a[N] = 0;}
        }
        cnt--;
    }
    ofstream fout("nextseq.out");
    fout << cnt << "\n";
    fout.close();
}

int main()
{
    Citire();
    Numara();
    return 0;
}