Pagini recente » Cod sursa (job #2221698) | Cod sursa (job #71180) | Cod sursa (job #1805834) | Cod sursa (job #1543668) | Cod sursa (job #393263)
Cod sursa(job #393263)
#include<stdio.h>
#include<algorithm>
using namespace std;
int i,j,n,m,p,a[10010],in[10010],nr,l,x[10010],b[10010],ok,p1[10010];
int cautbin(int a)
{
int st=1,dr=n,mij=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(x[mij]==a) return mij;
else if(a>x[mij]) st=mij+1;
else dr=mij-1;
}
return 0;
}
int verifica(int l)
{
if(l<p) return 0;
for(int i=1;i<=l;++i) if(b[i]-p1[i]) return 0;
return 1;
}
void back1(int i)
{
if(i>m)
{
if(verifica(m))
{
ok=1;
return;
}
++nr;
return;
}
for(int j=in[i];j<=n&&!ok;++j)
{
p1[i]=x[j];
back1(i+1);
}
}
void back(int i,int l)
{
if(i>l)
{
if(verifica(l))
{
ok=1;
return;
}
++nr;
return;
}
for(int j=1;j<=n&&!ok;++j)
{
p1[i]=x[j];
back(i+1,l);
}
}
int main()
{
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
scanf("%d %d %d",&n,&m,&p);
for(i=1;i<=n;++i)
scanf("%d",&x[i]);
sort(x+1,x+n+1);
for(i=1;i<=m;++i)
{
scanf("%d",&a[i]);
in[i]=cautbin(a[i]);
}
in[m]++;
for(i=1;i<=p;++i)
scanf("%d",&b[i]);
l=m;
back1(1);
while(!ok) back(1,++l);
printf("%d\n",nr);
fclose(stdin);
fclose(stdout);
return 0;
}