o0w0o / ARTS

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

codeforce ECR 73 #134

Open zwwhdls opened 4 years ago

zwwhdls commented 4 years ago

A 题

题意:解 2048 游戏,判断给定数组是否能赢得游戏 思路: 一个 for 循环:

  1. 从小到大排序;
  2. 只比较第一个和第二个数,如果相等,相加置为第二个数,第一个数置为最大;若不相等,将第一个数置为最大;
  3. 再走循环,直到第一个数为 2048,或者只剩一个数小于 2048;
package main

import (
    "bufio"
    "fmt"
    "math"
    "os"
    "sort"
)

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

    _, err := fmt.Fscan(input, &testCase)
    if err != nil {
    }

    for testCase > 0 {
        testCase--

        var x int
        _, err := fmt.Fscan(input, &x)
        if err != nil {
        }

        s := make([]int, x)
        for i := 0; i < x; i++ {
            _, err = fmt.Fscan(input, &s[i])
            if err != nil {
            }
        }

        result := "NO"

        if len(s) == 1 && s[0] == 2048 {
            result = "YES"
        }
        for len(s) > 1 {
            sort.Ints(s)
            //fmt.Println(s)
            if s[0] == 2048 {
                result = "YES"
                break
            } else if s[0] > 2048 {
                break
            }
            if s[0] == s[1] {
                s[0] = math.MaxInt32
                s[1] = s[1] + s[1]
            } else {
                s[0] = math.MaxInt32
            }
        }

        fmt.Println(result)
    }

}

B 题

题意:下军棋,骑士走“日”,给定一个棋盘,要求将里面放满“W”和 “B” 颜色的骑士,使得战争最多; 思路:将棋盘间隔放满不同颜色的骑士即可。

package main

import (
    "bufio"
    "fmt"
    "os"
)

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

    var x int
    _, err := fmt.Fscan(input, &x)
    if err != nil {
    }

    for i := 0; i < x; i++ {
        for j := 0; j < x; j++ {
            if (i+j)%2 == 0 {
                fmt.Print("W")
            } else {
                fmt.Print("B")
            }
        }
        fmt.Print("\n")
    }
}

C 题

题意:一个中学组织比赛,每个学生要么擅长 code,要么擅长数学,要么什么都不会;参加比赛的组由3个人组成,一个 perfect team 的组成是既包含 code 又包含数学。给定 code 、数学及什么都不会的学生数,求最多能组成多少 perfect team。

思路:三个数:擅长 code 学生数、擅长数学学生数、最多能组成team 数;三个数求最小。

package main

import (
    "bufio"
    "fmt"
    "os"
)

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

    _, err := fmt.Fscan(input, &testCase)
    if err != nil {
    }

    for testCase > 0 {
        testCase--

        var c, m, x int
        _, err := fmt.Fscan(input, &c, &m, &x)
        if err != nil {
        }

        teamNum := (c + m + x) / 3
        if c < m {
            if c < teamNum {
                fmt.Println(c)
            } else {
                fmt.Println(teamNum)
            }
        } else {
            if m < teamNum {
                fmt.Println(m)
            } else {
                fmt.Println(teamNum)
            }
        }

    }

}