Cod sursa(job #3327403)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 3 decembrie 2025 18:40:53
Problema NextSeq Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <fstream>
#include <algorithm>
#define NMAX 10002
using namespace std;
ifstream  fin("nextseq.in");
ofstream fout("nextseq.out");
int N,M,P,ans,X[NMAX],A[NMAX],B[NMAX],S[NMAX];

void citire()
{
    fin>>N>>M>>P;

    for(int i=1; i<=N; i++)
    {
        fin>>X[i];
    }

    for(int i=1; i<=M; i++)
    {
        fin>>A[i];
    }

    for(int i=1; i<=P; i++)
    {
        fin>>B[i];
    }
}

void BACK(int pos, int L, int statusA, int statusB)
{
    if(pos>L)
    {
        if(L==M && statusA!=1)
        {
            return;
        }

        if(L==P && statusB!=1)
        {
            return;
        }

        ans++;
        return;
    }

    for(int i=1; i<=N; i++)
    {
        int val=X[i];
        S[pos]=val;

        int newA=statusA;
        int newB=statusB;

        if (L == M)
        {
            if(statusA==0)
            {
                if(val<A[pos])
                {

                    continue;
                }
                else
                {
                    if(val>A[pos])
                    {
                        newA=1;
                    }
                    else
                    {
                        newA=0;
                    }
                }
            }
        }
        else
        {
            newA = 1;
        }

        if(L==P)
        {
            if(statusB==0)
            {
                if(val>B[pos])
                {
                    continue;
                }
                else
                {
                    if(val<B[pos])
                    {
                        newB=1;
                    }
                    else
                    {
                        newB=0;
                    }
                }
            }
        }
        else
        {
            newB=1;
        }

        BACK(pos+1,L,newA,newB);
    }
}

int main()
{
    citire();

    sort(X+1,X+N+1);

    ans=0;
    for(int l=M; l<=P; l++)
    {
        int pA,pB;

        if(l==M)
        {
            pA=0;
        }
        else
        {
            pA=1;
        }

        if(l==P)
        {
            pB=0;
        }
        else
        {
            pB=1;
        }

        BACK(1,l,pA,pB);
    }

    fout<< ans << "\n";

    return 0;
}