Cod sursa(job #979149)

Utilizator dariusdariusMarian Darius dariusdarius Data 31 iulie 2013 21:29:41
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
#include<algorithm>
using namespace std;
int N,M,P;
int A[10005];
int B[10005];
int S[10005];
int q[10005];
void increment(int *V)
{
    ++V[1];
    for(int i=1;i<=V[0];i++)
        if(V[i]==N+1)
        {
            ++V[i+1]; V[i]-=N;
            if (i==V[0]) ++V[0];
        }
}
bool equal(int* V1, int* V2)
{
    if(V1[0]!=V2[0]) return false;
    for(int i=1;i<=V1[0];i++)
        if(V1[i]!=V2[i])
            return false;
    return true;
}
int main()
{
    ifstream fin("nextseq.in");
    ofstream fout("nextseq.out");
    fin>>N>>M>>P;
    for(int i=1;i<=N;i++) fin>>S[i];
    for(int i=1;i<=M;i++) fin>>A[i];
    for(int i=1;i<=P;i++) fin>>B[i];
    sort(S+1,S+N+1);
    for(int i=1;i<=N;i++) q[S[i]]=i;
    for(int i=1;i<=M;i++) A[i]=q[A[i]];
    for(int i=1;i<=P;i++) B[i]=q[B[i]];
    reverse(A+1,A+M+1);A[0]=M;
    reverse(B+1,B+P+1);B[0]=P;
    int result=0;
    while(!equal(A,B))
    {
        increment(A);
        ++result;
    }
    fout<<result-1<<'\n';
    return 0;
}