Cod sursa(job #433756)

Utilizator SpiderManSimoiu Robert SpiderMan Data 4 aprilie 2010 11:42:59
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <cmath>
using namespace std;

#define MAX 50005

ifstream f("nextseq.in");
ofstream g("nextseq.out");

int N,M,P,X[MAX],Y[MAX],A[MAX],B[MAX],i,AUX[3];

inline void sub(int A[], int B[], int N)
{
    int i, t = 0;
    for (i = 1; i <= A[0]; i++)
        A[i] += (t = (A[i] -= B[i] + t) < 0) * N;

    for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
inline void add(int A[], int B[], int N)
{
    int i, t = 0;
    for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=N)
        A[i] = (t += A[i] + B[i]) % N;
    A[0] = i - 1;
}

inline int comp(int A[], int B[])
{
    while (A[0] && !A[A[0]]) A[0]--;
    while (B[0] && !B[B[0]]) B[0]--;
    if (A[0] < B[0]) return -1;
    else if (A[0] > B[0]) return 1;
    for (int i = A[0]; i > 0; --i)
        if (A[i] < B[i]) return -1;
        else if (A[i] > B[i]) return 1;
    return 0;
}
int main()
{
    f >> N >> M >> P;
    AUX[0] = AUX[1] = 1;
    A[0] = M, B[0] = P;
    for (i = 1; i <= N; i++)
        f >> X[i];
    for (i = 1; i <= M; i++)
        f >> A[i];
    for (i = 1; i <= P; i++)
        f >> B[i];
    reverse( A + 1, A + M + 1);
    reverse( B + 1, B + P + 1);
    sort( X + 1, X + N + 1 );
    for (i = 1; i <= N; i++)
        Y[X[i]] = i - 1;
    for (i = 1; i <= M; i++)
        A[i] = Y[A[i]];;
    for (i = 1; i <= P; i++)
        B[i] = Y[B[i]];

    //add(A,AUX,N);
    //sub(B,A,N);
    i = 0;
    bool stop=0;
    while (comp(A,B) != -1)
    {
        if (comp(A,B)==0) stop=1;
        add(B,AUX,N);
        i++;
    }
    if (!stop)
    g << i ;else g << i+1;
    //for (i = B[0] - 1; i > 0; i--)
    //g<<B[i]<<" ";
    return 0;
}