Pagini recente » Cod sursa (job #3203426) | Utilizatori inregistrati la ONIS 2014, Runda 1 | Cod sursa (job #3274802) | Cod sursa (job #3215313) | Cod sursa (job #2926505)
#include <bits/stdc++.h>
#define LIM 1<<17
/// TONI BO$$ was here
/// #MLC
using namespace std;
long long dp[101][2];
int sir[101];
int main()
{
int i, n, a, b, j;
long long k, suma, sumb, sum;
freopen("pavare2.in","r",stdin);
freopen("pavare2.out","w",stdout);
scanf("%d%d%d%lld", &n, &a, &b, &k);
dp[0][0] = dp[0][1] = 1;
suma = 1;
sumb = 1;
for(i = 1; i <= n; i++)
{
if(i >= a + 1) suma -= dp[i - a - 1][1];
if(i >= b + 1) sumb -= dp[i - b - 1][0];
dp[i][0] = suma;
dp[i][1] = sumb;
suma += dp[i][1];
sumb += dp[i][0];
}
printf("%lld\n", dp[n][0] + dp[n][1]);
if(k > dp[n][0]) sir[n] = 1, k -= dp[n][0];
else sir[n] = 0;
for(i = n; i > 1;)
{
if(sir[i] == 1)
{
sum = 0;
for(j = i - 1; j > i - b - 1 && j >= 0; sum += dp[j][0], j--)
if(sum + dp[j][0] >= k)
break;
while(i > j)
sir[i--] = 1;
sir[j] = 0;
}
else
{
sum = 0;
for(j = max(i - a, 0); j < i; sum += dp[j][1], j++)
if(sum + dp[j][1] >= k)
break;
while(i > j)
sir[i--] = 0;
sir[j] = 1;
}
}
for(i = 1; i <= n; i++)
printf("%d", sir[i]);
return 0;
}