Cod sursa(job #657496)

Utilizator teo721Pavel Teo teo721 Data 6 ianuarie 2012 17:44:34
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include<iostream>
#include<fstream>
using namespace std;
int x[200]={},a[200],b[200],h[200],st[200];
int init(int);
int valid(int,int,int,int);
int succesor(int,int);
int solutie(int,int);
int afisare(int);
int main()
{
    int i,j,n,m,p,v,s,aux,k,contor=0;
    fstream f("nextseq.in",ios::in);
    f>>n>>m>>p;
    for(i=1;i<=n;i++)
     f>>x[i];
    for(i=1;i<n;i++)
     for(j=i+1;j<=n;j++)
       if(x[i]>x[j])
       {
         aux=x[i];
         x[i]=x[j];
         x[j]=aux;
       }
    for(i=1;i<=m;i++)
     f>>a[i];
    
    for(i=1;i<=p;i++)
     f>>b[i];
    
     f.close();
    for(i=m ;i<=p;i++)
    {
      
    k=1;
    init(k);
    while(k>0)
    {
      do
      {
        s=succesor(k,n);
        if(s)
        {
          v=valid(k,p,m,i);
        }
      }
      while(!((s&&v)||(!s)));
      if(s)
      {
           if(solutie(k,i))
             {
             contor++;
             }
           else
           {
               k++;
               init(k);
               }
      }
      else
       k--;
      }
    }
    contor--;
    fstream g("nextseq.out",ios::out);
    g<<contor;
    g.close();
}
int init(int k)
{
    h[k]=0;
    st[k]=x[h[k]];
    return 1;
}
int succesor(int k,int n)
{
    if(h[k]<n)
    {
      h[k]++;
      st[k]=x[h[k]];
      return 1;
    }
    else
    return 0;
}
int valid(int k,int p,int m,int i)
{
    if((k==m)&&(i==m))
    {
        int j,q=1;
        for(j=1;j<=m;j++)
           if(st[j]<a[j])
             q=0;
        return q;
        }
   else
   {
   if(k<p)
     return 1;
   else
      if(k==p)
      {
        int j,q=1;
        for(j=1;j<=p;j++)
        {
           if(st[j]>b[j])
             q=0;
        }
        return q;
        }
        else
        return 0;
        }
}
int solutie(int k,int i)
{
    if(k==i)
     return 1;
    else
     return 0;
}
int afisare(int k)
{
    int i;cout<<endl;
    for(i=1;i<=k;i++)
     cout<<st[i]<<" ";
     return 1;
}