寒假6 go

A

cpp用了set

这里用map[int]bool一样

package main

import (
	"fmt"
)

func main() {
	
	a := []int{2, 3, 5, 7, 11, 13}
	st := make(map[int]bool)
	for i := 0; i < 6; i++ {
		for j := i + 1; j < 6; j++ {
			for k := j + 1; k < 6; k++ {
				st[a[i]*a[j]*a[k]] = true
			}
		}
	}
	
	var l, r int
	flag := true
	fmt.Scan(&l, &r)
	for i := l; i <= r; i++ {
		if _, ok := st[i]; ok {
			fmt.Println(i)
			flag = false
			break
		}
	}
	if flag {
		fmt.Println(-1)
	}
	
}

B

二分查找最小 更新 idx和location的值 然后swap (有人没更新minn wa了...)

不加快读快写就t.....

package main

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

func main() {
	var n int
	fmt.Scan(&n)

	reader := bufio.NewReader(os.Stdin)

	a := make([]int, n)
	b := make([]int, n)

	for i := 0; i < n; i++ {
		a[i] = fastReadInt(reader)
	}

	for i := 0; i < n; i++ {
		b[i] = fastReadInt(reader)
	}

	sort.Ints(a)

	minn := int(^uint(0) >> 1)
	var location, idx int

	for i := 0; i < n; i++ {
		p := sort.Search(len(a), func(j int) bool { return a[j] >= b[i] })
		if p == n {
			p--
		}
		if p > 0 && abs(a[p-1]-b[i]) < abs(a[p]-b[i]) {
			p--
		}
		if abs(a[p]-b[i]) < minn {
			location = p
			idx = i
			minn = abs(a[p]-b[i])
		}
		if minn == 0 {
			break
		}
	}
	a[location], a[idx] = a[idx], a[location]

	writer := bufio.NewWriter(os.Stdout)

	for i := 0; i < n; i++ {
		fmt.Fprint(writer, a[i])
		if i != n-1 {
			fmt.Fprint(writer, " ")
		}
	}
	fmt.Fprintln(writer)

	writer.Flush()
}

func fastReadInt(reader *bufio.Reader) int {
	num := 0
	sign := 1
	for {
		ch, err := reader.ReadByte()
		if err != nil {
			break
		}
		if ch == '-' {
			sign = -1
		} else if '0' <= ch && ch <= '9' {
			num = num*10 + int(ch-'0')
		} else if ch == ' ' || ch == '\n' {
			break
		}
	}
	return num * sign
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

C

看数据范围

打表造数据....

当然把斐波那契存一下也行,慢不了多少

用map来存n和idx idx对应一个结构体数组来存相应的斐波那契元素

不加快读快写要t....

package main

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

var fibnacial = []int{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811,
	514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296,
	433494437, 701408733}

type node struct {
	i int
	j int
	k int
}

func main() {
	var q int
	fmt.Scan(&q)

	mp := make(map[int]int)
	cnt := 0
	p := make([]node, 45*45*45)

	for i := 0; i < 45; i++ {
		for j := 0; j < 45; j++ {
			for k := 0; k < 45; k++ {
				sum := fibnacial[i] + fibnacial[j] + fibnacial[k]
				mp[sum] = cnt
				p[cnt].i = fibnacial[i]
				p[cnt].j = fibnacial[j]
				p[cnt].k = fibnacial[k]
				cnt++
			}
		}
	}

	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)

	for q > 0 {
		n := fastReadInt(reader)

		if idx, ok := mp[n]; ok {
			fmt.Fprintln(writer, p[idx].i, p[idx].j, p[idx].k)
		} else {
			fmt.Fprintln(writer, -1)
		}

		q--
	}

	writer.Flush()
}

func fastReadInt(reader *bufio.Reader) int {
	num := 0
	sign := 1
	for {
		ch, err := reader.ReadByte()
		if err != nil {
			break
		}
		if ch == '-' {
			sign = -1
		} else if '0' <= ch && ch <= '9' {
			num = num*10 + int(ch-'0')
		} else if ch == ' ' || ch == '\n' {
			break
		}
	}
	return num * sign
}

D

模拟

概率

package main

import "fmt"

func main() {

	var p float64
	fmt.Scan(&p)
	fmt.Print( p*p*(1-p)*(1-p) )
}

E

模拟

这个BOx x(max)=1e5没看到 以为是个位数......喜提wa1发

因为输入流的问题

var p,q byte
fmt.Scan(&p,&q)
var op int
fmt.Scan(&op)

读入会失败 索性用快读()

package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)

	var p, q byte
	fmt.Fscanf(reader, "%c %c\n", &p, &q)

	var op int
	fmt.Fscanf(reader, "%d\n", &op)

	var s string
	fmt.Fscanf(reader, "%s\n", &s)

	winCount := op/2 + 1
	cntr := 0
	cntp := 0
	flag := 0

	for i := 0; i < len(s); i++ {
		if s[i] == 'R' {
			cntr++
		} else {
			cntp++
		}

		if cntr == winCount {
			fmt.Fprintln(writer, "kou!")
			fmt.Fprintln(writer, i+1)
			flag = 1
			break
		}

		if cntp == winCount {
			fmt.Fprintln(writer, "yukari!")
			fmt.Fprintln(writer, i+1)
			flag = 1
			break
		}
	}

	if flag == 0 {
		fmt.Fprintln(writer, "to be continued.")
		fmt.Fprintln(writer, len(s))
	}

	writer.Flush()
}

I

推公式发现任意一个子矩阵的和都是一段ai的和乘以一段bi的和

转化为寻找sumsub(ai)*sumsub(bi)的最大值

难绷的是有负数 我把最小的也找了() 直接输出几个中的最大的就过了....

package main

import (
	"fmt"
)

func maxsum(p []int) int {
	n := len(p)
	ans := p[0]
	sum := 0
	for i := 0; i < n; i++ {
		sum = max(sum+p[i], p[i])
		ans = max(ans, sum)
	}
	return ans
}

func minsum(p []int) int {
	n := len(p)
	ans := p[0]
	sum := 0
	for i := 0; i < n; i++ {
		sum = min(sum+p[i], p[i])
		ans = min(ans, sum)
	}
	return ans
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
func main() {
    var n, m int
    fmt.Scan(&n, &m)
 
    a := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&a[i])
    }
 
    b := make([]int, m)
    for i := 0; i < m; i++ {
        fmt.Scan(&b[i])
    }

	p1 := maxsum(a)
	p2 := minsum(a)
	q1 := maxsum(b)
	q2 := minsum(b)

	fmt.Println(max(max(q1*p1, q1*p2), max(q2*p1, q2*p2)))
}

J

DFS

将未涂色的节点和该红节点构造和为3的倍数即可

package main

import (
	"fmt"
)

const N = 1e5 + 10

var n int
var f [N]int
var a [N]int
var s string
var e, E [N][]int
var R []int

func dfs(u, fa int) {
	if s[u] == 'W' {
		f[u] = f[fa]
	}
	for _, v := range e[u] {
		if v != fa {
			dfs(v, u)
		}
	}
}

func main() {
	fmt.Scan(&n, &s)
	s = " " + s
	for i := 2; i <= n; i++ {
		var x int
		fmt.Scan(&x)
		e[x] = append(e[x], i)
	}
	for i := 1; i <= n; i++ {
		f[i] = i
		a[i] = 1
	}
	dfs(1, 0)
	for i := 1; i <= n; i++ {
		if f[i] == i {
			R = append(R, i)
		}
		E[f[i]] = append(E[f[i]], i)
	}
	for _, u := range R {
		if len(E[u]) == 1 {
			fmt.Println(-1)
			return
		}
		if len(E[u])%2 == 1 {
			for i := 0; i < 3; i++ {
				a[E[u][i]] = 1
			}
			for i := 3; i < len(E[u]); i++ {
				a[E[u][i]] = (i & 1) + 1
			}
		} else {
			for i := 0; i < len(E[u]); i++ {
				a[E[u][i]] = (i & 1) + 1
			}
		}
	}
	for i := 1; i <= n; i++ {
		fmt.Print(a[i])
	}
	fmt.Println()
}
posted @ 2024-02-27 16:26  cyyyyyyyyyyyyy  阅读(14)  评论(0)    收藏  举报