Cod sursa(job #7048)

Utilizator DragoshZZabava Dragos DragoshZ Data 21 ianuarie 2007 12:07:30
Problema Diviz Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 0.95 kb
#include<iostream.h>
#include<fstream.h>
#include<string.h>

fstream f("diviz.in",ios::in);
fstream g("diviz.out",ios::out);
int x[201],k,kk,a,da,b,as,ev,l,nr,nrs;
char s[201] ;


void init()
{ x[k]=-1;
}

int succesor()
{ if(x[k]<1&&k<=l)
	{x[k]++;
	return 1;}
 else
	return 0;
}

int valid()
{  return (k<=l);
}

int solutie()
{ int sum=0,i,nr=0;
	for(i=1;i<=l;i++)
		if(x[i])
			nr++;
if((nr>=a)&&(nr<=b))
     {for(i=1;i<=l;i++)
	if(x[i])
		sum=(sum*10)+(s[i-1]-'0');
     if(sum%kk==0)
	return 1;
     else
      return 0;
     }
 else
	return 0;
}

void back()
{  k=1;
   nr=0;
   nrs=0;
   init();
   while(k)
   {   do
	{  as=succesor();
	  if(as)
		ev=valid();
	}
      while(as&&!ev);
      if(as)
	if(solutie())
		nrs++;
	else
		{k++,init();}
      else
	k--;

   }
}

int main()
{ f>>kk>>a>>b;
f.get();
f.get(s,201);
l=strlen(s);
back();
g<<(nrs&30103);
f.close();
g.close();
return 0;
}