题意:有一个车站,每割 2^2k 秒发一辆车,求,在第 s 秒错过了多少辆车。
思路:s 以二进制的形式输入,判断其位数为 2k 形式即可。
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
input := bufio.NewReader(os.Stdin)
var s string
_, err := fmt.Fscan(input, &s)
if err != nil {
}
n := len(s)
result := (n - 1) / 2
k := s[1:]
if (n-1)%2 != 0 {
fmt.Println(result + 1)
return
}
if t, _ := strconv.Atoi(k); t == 0 {
fmt.Println(result)
return
}
fmt.Println(result + 1)
}
B 题
题意:一个数组总共有 n 个值,不同的值的个数满足 <= r , >= j ;每个值要么为 1,要么为偶数,偶数的话且其除以 2 的值也存在于数组中,求该数组所有值的和最大和最小的情况。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
input := bufio.NewReader(os.Stdin)
var n, l, r int
_, err := fmt.Fscan(input, &n, &l, &r)
if err != nil {
}
var arrMin = make([]int, n)
var arrMax = make([]int, n)
var min, max int
arrMin[0] = 1
arrMax[0] = 1
min += arrMin[0]
max += arrMax[0]
if n == 1 {
fmt.Println(1, 1)
return
}
for i := 1; i < n; i++ {
if (i + 1) <= l {
arrMin[i] = 2 * arrMin[i-1]
} else {
arrMin[i] = 1
}
min += arrMin[i]
if (i + 1) <= r {
arrMax[i] = 2 * arrMax[i-1]
} else {
arrMax[i] = arrMax[i-1]
}
max += arrMax[i]
}
fmt.Println(min, max)
}
A 题
题意:有一个车站,每割 2^2k 秒发一辆车,求,在第 s 秒错过了多少辆车。 思路:s 以二进制的形式输入,判断其位数为 2k 形式即可。
B 题
题意:一个数组总共有 n 个值,不同的值的个数满足 <= r , >= j ;每个值要么为 1,要么为偶数,偶数的话且其除以 2 的值也存在于数组中,求该数组所有值的和最大和最小的情况。