o0w0o / ARTS

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

codeforce #581 #81

Open zwwhdls opened 5 years ago

zwwhdls commented 5 years ago

A 题

题意:有一个车站,每割 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)
}