package main
import (
"bufio"
"fmt"
"os"
)
func main() {
input := bufio.NewReader(os.Stdin)
var (
t string
)
_, _ = fmt.Fscan(input, &t)
dk := len(t) - 1
more := false
k := dk / 2
if dk % 2 != 0{
more = true
}
if !more{
for i, n := range t {
if i == 0{
continue
}
if n == '1' {
more = true
break
}
}
}
if more{
fmt.Println(k + 1)
}else {
fmt.Println(k)
}
}
B
一个 n 长度的数组,最少 l 种不同元素,最大 r 种不同元素,设 l <= x <= r 每种元素都是 1 << x
最大值就是 x 尽量大,最小值就是 1 尽量多
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
input := bufio.NewReader(os.Stdin)
var (
n int
l int
r int
iMax int
iMin int
)
_, _ = fmt.Fscan(input, &n, &l, &r)
var c uint
c = 0
for i := 0; i < l; i += 1 {
iMin += 1 << c
c += 1
}
iMin += n - l
if n < r {
r = n
}
c = 0
for i := 0; i < r; i += 1 {
iMax += 1 << c
c += 1
}
iMax += (n - r) * (1 << (c - 1))
fmt.Printf("%d %d\n", iMin, iMax)
}
A 题
某城市每 4^k (k 递增)发一班车,给一个时间问发了几班
因为 4^k = 2^2k = 1 << 2k,所以把给的字符串求一下长度,长度 - 1 就是 2k,不过注意区分奇偶
B
一个 n 长度的数组,最少 l 种不同元素,最大 r 种不同元素,设 l <= x <= r 每种元素都是 1 << x 最大值就是 x 尽量大,最小值就是 1 尽量多