Cod sursa(job #115254)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 16 decembrie 2007 11:49:52
Problema Multiplu Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 11-12 Marime 1.03 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int N_MAX = 100;

int st[N_MAX], A, B;

int MOD(int A[], int x)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % x;
      return t;
}

int i, MIN[50];

int comp(int A[], int B[])
{
	if (A[0] != B[0]) return (A[0] < B[0]);
	else {
		for (i = A[0]; i >= 1; i --) {
			if (A[i] != B[i]) return (A[i] < B[i]);
		}
	}

	return 0;
}

int g;

void back(int k)
{
	g = 0;
	for (i = 1; i < k; i ++) {
		if (st[i] != 0) {
			g = 1;
			break;
		}
	}
	if (g) {
		st[0] = k - 1;
		if (MOD(st, A) == 0 && MOD(st, B) == 0) {
			if (comp(st, MIN)) memcpy(MIN, st, sizeof(st));
		}
	}
	if (k <= 18) {
		for (int c = 0; c < 2; c ++) {
			st[k] = c;
			back(k + 1);
		}
	}
}

int main()
{
	freopen("multiplu.in", "r", stdin);
#ifndef _SCREEN_
	freopen("multiplu.out", "w", stdout);
#endif

	scanf("%d %d\n", &A, &B);
	MIN[0] = 40;
	for (i = 1; i <= 40; i ++) MIN[i] = 4;
	back(1);

	for (i = MIN[0]; i >= 1; i --) printf("%d", MIN[i]);
	printf("\n");

	return 0;
}