← Home
package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

func solveAlice(n, h int) float64 {
	ans := float64(n)
	fn := float64(n)
	for j := 1; j <= h; j++ {
		p2 := math.Ldexp(1.0, j)
		y := math.Log1p(fn/(p2-1.0)) + fn*math.Log1p(-1.0/p2)
		if y > 0 && y < 1e-15 {
			y = 0
		}
		ans += 0.5 * p2 * (-math.Expm1(y))
	}
	return ans
}

func solveBob(b, h int) float64 {
	prevG := make([]float64, b+1)
	prevS := make([]float64, b+1)
	for i := 1; i <= b; i++ {
		prevG[i] = 1.0
		prevS[i] = float64(i)
	}
	if h == 0 {
		return float64(b)
	}

	powNeg := make([]float64, b+1)
	for i := 1; i <= b; i++ {
		powNeg[i] = math.Ldexp(1.0, -i)
	}

	curG := make([]float64, b+1)
	curS := make([]float64, b+1)

	for level := 1; level <= h; level++ {
		Ag, Tg, Ug := 0.0, 0.0, 0.0
		As, Ts := 0.0, 0.0
		for q := 1; 2*q-1 <= b; q++ {
			fq := float64(q)
			g := prevG[q]
			s := prevS[q]

			Ag = g + 0.25*Ag
			Tg = fq*g + 0.25*Tg
			Ug = fq*fq*g + 0.25*Ug
			As = s + 0.25*As
			Ts = fq*s + 0.25*Ts

			m1 := 2*q - 1
			base1 := powNeg[m1]
			curG[m1] = base1 + (fq+0.5)*Ag - Tg
			curS[m1] = float64(m1)*base1 + 2.0*((fq+0.5)*As-Ts) + (2.0*fq*fq-0.5)*Ag - 4.0*fq*Tg + 2.0*Ug

			m2 := 2 * q
			if m2 <= b {
				base2 := powNeg[m2]
				curG[m2] = base2 + 0.5*((fq+1.0)*Ag-Tg)
				curS[m2] = float64(m2)*base2 + (fq+1.0)*As - Ts + (fq*fq+fq)*Ag - (2.0*fq+1.0)*Tg + Ug
			}
		}
		prevG, curG = curG, prevG
		prevS, curS = curS, prevS
	}

	return prevS[b] / prevG[b]
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	var name string
	var n, h int
	fmt.Fscan(in, &name)
	fmt.Fscan(in, &n, &h)

	var ans float64
	if name == "Alice" {
		ans = solveAlice(n, h)
	} else {
		ans = solveBob(n, h)
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintf(out, "%.15f\n", ans)
	out.Flush()
}