o0w0o / ARTS

ARTS 鸽友打卡🐦
2 stars 0 forks source link

Codeforces Round #581 (Div. 2) #83

Open hyponet opened 5 years ago

hyponet commented 5 years ago

A 题

某城市每 4^k (k 递增)发一班车,给一个时间问发了几班

因为 4^k = 2^2k = 1 << 2k,所以把给的字符串求一下长度,长度 - 1 就是 2k,不过注意区分奇偶

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)
}