Tight words
Given is an alphabet {0, 1, ... , k}, 0 <= k <= 9 . We say that a word of length n over this alphabet is tight if any two neighbour digits in the word do not differ by more than 1.
Input is a sequence of lines, each line contains two integer numbers k and n, 1 <= n <= 100. For each line of input, output the percentage of tight words of length n over the alphabet {0, 1, ... , k} with 5 fractional digits.
Sample input
4 1
2 5
3 5
8 7
Output for the sample input
100.00000
40.74074
17.38281
0.10130
Saturday, June 27, 2009
69.Tight words
Subscribe to:
Post Comments (Atom)

1 comments:
Tight Words sol in c:
#include stdio.h
#include math.h
/* let N(j,l) be the number of tight words of length j and ending in l */
/* N(j,l) = N(j-1,l-1)+N(j-1,l)+N(j-1,l+1) */
void compute(int nn, int kk)
{
double frac=0.0;
int i,j,k;
int N[101][10];
/* initialize */
for (j=0; jLEnn; j++)
for (k=0; kLEkk; k++)
N[j][k]= 0;
/* base case */
for (k=0; kLEkk; k++)
N[1][k]= 1;
/* recursive step */
for (j=2; jLEnn; j++)
for (k=0; kLEkk; k++)
{
N[j][k]= N[j-1][k];
if(kGT0) N[j][k] += N[j-1][k-1];
if(kLTkk) N[j][k] += N[j-1][k+1];
}
/* compute answer */
for (i=0; iLEkk; i++) frac += N[nn][i];
frac /= pow(kk+1,nn)/100.0;
//printf("%1.5f %f\n", frac, pow(kk+1,nn));
printf("%1.5f\n", frac);
}
int main()
{
int n,k;
while(scanf("%d %d", &k, &n)!=EOF)
{
/* printf("%d %d\n", n, k); */
compute(n,k);
}
return 0;
}
Post a Comment