在 ACM 模式下如何进行输入输出?
以一道题为例:
因为os.Stdin的方式输入的都为字符串,所以使用按行读取字符串的方式不容易出错。
package mainimport ("fmt""bufio""strings""os""strconv")func main() {input := bufio.NewScanner(os.Stdin)input.Scan() // 将第一行输入读取到input.Text()n, _ := strconv.Atoi(input.Text())nums := make([]int, n)input.Scan() // 将第二行输入读取到input.Text()// 将输入转化为字符串数组,逐个转换后加入到容易处理的[]int类型中s := strings.Split(input.Text(), " ")for i, b := range s {v, _ := strconv.Atoi(b)nums[i] = v}fmt.Println(countBuilding(n, nums))}func countBuilding(n int, nums []int) string {ans := make([]int, len(nums))for i := range nums {// 先正向统计maxHigh := 0for j := i+1; j < len(nums); j++ {if nums[j] >= maxHigh {ans[i]++maxHigh = nums[j]}}// 再反向统计maxHigh = 0for j := len(nums)-i-2; j >= 0; j-- {if nums[j] >= maxHigh {ans[len(ans)-1-i]++maxHigh = nums[j]}}ans[i]++}res := ""for _, v := range ans {res += strconv.Itoa(v) + " "}return res[:len(res)-1]}
常用的标准库 API 使用
简单从小到大排序
import "sort"func main() {nums := []int{3,1,2}sort.Ints(nums) // 将 nums 从小到大排序}
自定义排序
import "sort"func main() {nums := []float64{1.0, 2.0, 0.9}sort.Slice(nums, func(i, j int) bool {return nums[j] < nums[i] // 从大到小})}
随机数
import "rand"func main() {rnum := rand.Intn(n) // 返回一个 0~n-1 的数}
