Cod sursa(job #7030)

Utilizator alex_aurelia_31Neamtu Alexandra alex_aurelia_31 Data 21 ianuarie 2007 11:55:21
Problema Diviz Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.29 kb
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream.h>

FILE *f,*g;
int p, A,B;
int st[200],as,ev,nr,l,ls;
char N[200], sol[50][200];

void pune(char s[200])
{
int i,g=0;
for(i=1;i<=ls;i++)
	 if(strcmp(sol[i],s)==0) g=1;
if(!g) {
strcpy(sol[++ls],s);
}
}

void init(int k)
{
if (k==1)
st[k]=0;
else
st[k]=st[k-1];
}

int succesor(int k)
{
if(st[k]<strlen(N))
{
st[k]++;
return 1;
}
else
return 0;
}

int validare(int k)
{
return 1;
}

int solutie(int k)
{
if (k==l)
{
 char N1[200];
 int j=1,q=0,x;
 for(int i=0;i<=strlen(N);i++)
	if (i!=st[j]-1) N1[q++]=N[i];
	else j++;
 N1[q]='\0';
 if (N1[0]=='0') return 0;
 else
 {
 x=atoi(N1);
 if(x%p==0)  { pune(N1);
					return 1;
				  }
 else return 0;
 }
}
else return 0;
}


void back(int k)
{
k=1;
init(k);
while(k>0)
{
do
{
as=succesor(k);
if(as)
ev=validare(k);
}
while((as==1)&&(ev==0));
if(as)
{
if(solutie(k));
else
{
if(k<l)
{
k++;
init(k);
}
}
}
else
k--;
}
}


int main()
{
f=fopen("diviz.in","r");
g=fopen("diviz.out","w");
fscanf(f,"%d",&p);
fscanf(f,"%d",&A);
fscanf(f,"%d",&B);
fscanf(f,"%s",&N);
int x=atoi(N);
if (x%p==0) pune(N);
for(l=strlen(N)-B+1;l<=(strlen(N)-A);l++)
back(1);
fprintf(g,"%d",ls);
fcloseall();
return 0;
}