Pagini recente » Borderou de evaluare (job #2712506) | Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #205906)
Cod sursa(job #205906)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n, a, b, v[1005], s[1005], ca[1005], cb[1005], K[10000], cnt[10000], sol[1005], unu[1005];
int compar()
{
if (K[0] > cnt[0]) return -1;
if (K[0] < cnt[0]) return 1;
for (int i = K[0]; i >= 1; i--)
{
if (K[i] > cnt[i]) return -1;
if (K[i] < cnt[i]) return 1;
}
return 0;
}
void add(int A[], int B[])
{
int i, t;
for (i = 1, t = 0; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
void back(int k)
{
int i;
ca[k] = cb[k] = 0;
if (k > n)
{
add(cnt, unu);
if (compar() == 0) for (i = 1; i <= n; i++) sol[i] = s[i];
}
else
for (i = 0; i <= 1; i++)
{
if (i == 0 && ca[k - 1] < a)
{
s[k] = i;
ca[k] = ca[k - 1] + 1;
cb[k] = 0;
back(k + 1);
}
else if (i == 1 && cb[k - 1] < b)
{
s[k] = i;
ca[k] = 0;
cb[k] = cb[k - 1] + 1;
back(k + 1);
}
}
}
void afis()
{
int i;
for (i = cnt[0]; i >= 1; i--) printf("%d",cnt[i]);
printf("\n");
}
int main()
{
freopen("pavare2.in","r",stdin);
freopen("pavare2.out","w",stdout);
char s[1000];
int i;
scanf("%d %d %d",&n,&a,&b);
scanf("%s",&s);
K[0] = strlen(s);
for (i = 1; i <= K[0]; i++)
{
K[i] = s[ K[0] - i ] - '0';
}
cnt[0] = 1;
unu[0] = unu[1] = 1;
back(1);
afis();
for (i = 1; i <= n; i++) printf("%d",sol[i]);
printf("\n");
return 0;
}