小米笔试3月23日“移山”答案

package main

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

func main() {
	var n, m int
	input := bufio.NewScanner(os.Stdin)
	if input.Scan() {
		line := input.Text()
		arr := strings.Split(line, " ")
		n, _ = strconv.Atoi(arr[0])
		m, _ = strconv.Atoi(arr[1])
	}
	a := make([]int64, n)
	if input.Scan() {
		line := input.Text()
		arr := strings.Split(line, " ")
		for i := 0; i < len(arr); i++ {
			a[i], _ = strconv.ParseInt(arr[i], 10, 64)
		}
	}
	var l, r, h int
	var d []int
	x := 0
	for i := 0; i < m; i++ {
		x++
		// 差分数组,+2防止越界,也可以使用if
		d = make([]int, n+1)
		if input.Scan() {
			line := input.Text()
			arr := strings.Split(line, " ")
			l, _ = strconv.Atoi(arr[0])
			r, _ = strconv.Atoi(arr[1])
			h, _ = strconv.Atoi(arr[2])
		}
		d[l-1] = d[l-1] + h
		d[r] = d[r] - h
		for j := 1; j <= n; j++ {
			d[j] += d[j-1]
		}
		for j := 0; j < n; j++ {
			a[j] -= int64(d[j])
			if a[j] <= 0 {
				fmt.Println(x)
				return
			}
		}
		fmt.Println(a)
	}

}

//6 5
//8 9 10 25 36 63
//1 2 10

//5 4
//6 5 3 4 6
//1 3 2
//4 4 2
//3 5 1
//1 5 6

使用前缀和+差分数组做的,一定记得使用uint64,不然用例通过不了。

全部评论

相关推荐

01-16 18:34
四川大学 Java
欢迎加入AI:没有啥稳定不稳定,一切都源于业务快速发展还是收缩。我当年一开始去的央企,业务不赚钱,也贼卷,慢慢就开始优化了。。。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务