Cod sursa(job #1205379)

Utilizator tudorv96Tudor Varan tudorv96 Data 6 iulie 2014 13:08:26
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream fin ("nextseq.in");
ofstream fout ("nextseq.out");

const int N = 1e4 + 5;

int m, n, sz, a[N], b[N], sol, nr[N];
vector <int> v;

bool diff(int a[], int b[]) {
    if (a[0] != b[0])
        return 1;
    for (int i = 1; i <= a[0]; ++i)
        if (a[i] != b[i])
            return 1;
    return 0;
}

void add(int a[], int x) {
    int t = 1, i = 1;
    for (; i <= a[0] || t; ++i, t /= sz) {
        a[i] = (t += a[i]) % sz;
    }
    int aux = a[0];
    a[0] = i-1;
    if (aux != a[0])
        a[a[0]] = 0;
}

int main() {
    fin >> sz >> m >> n;
    for (int x, i = 0; i < sz; ++i) {
        fin >> x;
        v.push_back(x);
    }
    sort (v.begin(), v.end());
    v.resize (unique (v.begin(), v.end()) - v.begin());
    sz = v.size();
    for (vector <int> :: iterator it = v.begin(); it != v.end(); ++it)
        nr[*it] = it - v.begin();
    for (int x, i = 1; i <= m; ++i) {
        fin >> x;
        a[m - i + 1] = nr[x];
    }
    a[0] = m;
    for (int x, i = 1; i <= n; ++i) {
        fin >> x;
        b[n - i + 1] = nr[x];
    }
    b[0] = n;
    do {
        add(a, 1);
        sol++;
    } while (diff (a, b) && sol < 105);
    fout << sol - 1;
}