o0w0o / ARTS

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

Codeforces Round #575 周赛 #27

Open zwwhdls opened 5 years ago

zwwhdls commented 5 years ago

A 题

A 题就是两个人平分三份糖果,保最后两人一样多,全加起来除以 2,再向下取整。

代码不贴了。

B 题

题意:给你 n 个数据,把他们分成 k 组,每组和为奇数,如果满足不了要求,就输出 NO,如果可以分,输出 YES 和任何一种分法。 思路:找出所有奇数所在位置,组成数组 result[],该数组长度为 l;

  1. 如果 l < k,直接输出 NO;
  2. 如果 (l-k) % 2 == 1,也输出 NO;
  3. 如果 (l-k) % 2 == 0,输出 YES,并取 result 的前 k-1 个和 n 为最后输出。
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    input := bufio.NewReader(os.Stdin)
    var num int

    _, err := fmt.Fscanf(input, "%d\n", &num)
    if err != nil {
    }

    for num > 0 {
        num -= 1
        var n, k, j int

        _, err := fmt.Fscanf(input, "%v %v\n", &n, &k)
        if err != nil {
        }

        var arr = make([]int, n)
        var result = make([]string, n)

        for i := 0; i < n; i++ {
            _, err := fmt.Fscanf(input, "%v", &arr[i])
            if err != nil {
            }

            if arr[i]%2 == 1 {
                result[j] = strconv.Itoa(i + 1)
                j++
            }
        }
        _, err = fmt.Fscanf(input, "\n")
        if err != nil {
        }

        if j < k || (j-k)%2 != 0 {
            fmt.Println("NO")
            continue
        }
        fmt.Println("YES")

        total := result[:k-1]
        total = append(total, strconv.Itoa(n))

        fmt.Println(strings.Join(total, " "))
    }
}

总结:Go 语言获取输入要用 bufio,否则数据量大起来就超时了。