Cod sursa(job #8868)

Utilizator magicMaria Ionescu magic Data 25 ianuarie 2007 21:00:39
Problema Diviz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<fstream>
#include<cstdlib>
#include<iostream>

#define inputfile "diviz.in"
#define outputfile "diviz.out"

const int NMAX =  1000;

using namespace std;

int main()
{
  int K,A,B,N;
  ifstream from (inputfile);
  ofstream to (outputfile);
  
  from >> K >> A >> B >> N;

  int a[NMAX];
  int sol[NMAX];
  int aux[NMAX];
  int bune[NMAX];
  int nr_bune = 0;
  int nr_sol = 0;
 
  int i = 0;
  while (N != 0) 
    {
      a[i++] = N % 10;
      N /= 10;
    }
  int nr_elem = i;
  for (i = 0; i< nr_elem / 2; i++)
    swap(a[i],a[nr_elem-i-1]);
  
  for (i = 0; i<nr_elem; i++)
    sol[i] = 0;

  for (int C = A; C<=B; C++){ 
    int k=0;
    sol[k] = 1;
    int nr1 = 1;

    while (k>=0){ 
      if (nr1 == C){

	//
	int j = 0;
	for (int i = 0; i<nr_elem; i++)
	  if (sol[i])
	    aux[j++] = a[i];//*sol[i];
	
	int nr = 0;
	for (int i = 0; i< j; i++)
	  nr = (nr * 10) + aux[i];
	//cout<<nr<<'\n';
	
	if (nr % K == 0) {
	  int i = 0;
	  while ( (i<nr_bune) && (bune[i] != nr) )
	    i++;
	  if (bune[i] != nr) {
	    nr_sol++;
	    bune[nr_bune++]=nr;
	  }
	};
	  
	//for (int i =0; i<nr_elem; i++) cout<<sol[i]<<' ';
	//cout<<'\n';

	if (k<nr_elem-1){
	  sol[k]=0;
	  sol[++k]=1;
	}
	else {
	  sol[k]=0;
	  nr1--;
	  while ( (sol[--k] != 1) && (k>=0) );
	  if (k>=0) {
	    sol[k]=0;
	    sol[++k]=1;
	  }
	} // else
	
      } // if
      else 
	if (k<nr_elem-1) {
	  sol[++k] = 1;
	  nr1++;
	} //if 2
	else{
	  sol[k]=0;
	  nr1--;
	  while ( (sol[--k] != 1) && (k>=0) );
	  if (k>=0) {
	  sol[k]=0;
	  sol[++k]=1;
	  }
	}
      
    } //while

  } //for
  to << nr_sol;
}