通过前缀和来看golang的acm输入输出

前缀和

在这里插入图片描述

问题引入

package mainimport ("fmt"
)func main() {var n, q, l, r intfmt.Scan(&n, &q)a := make([]int, n)ap := make([]int64, n + 1)ap[0] = 0for i := 0; i < n; i++ {fmt.Scan(&a[i])ap[i + 1] = ap[i] + int64(a[i])}for j := 0; j < q; j++ {fmt.Scan(&l, &r)fmt.Println(ap[r] - ap[l-1])}
}

在这里插入图片描述
在这里插入图片描述
考虑是不是输入太慢了,用Scanner试试

package mainimport ("bufio""fmt""os""strconv""strings"
)func main() {/*fmt.Scan()不会处理换行符,所以后面用sc.Scan()会读取换行符*//*改用fmt.Scanln()读取一行,且会丢弃换行符*/var n, q, l, r int//var s stringfmt.Scan(&n, &q)//fmt.Scanln(s)//values := strings.Split(s, " ")//n, _ = strconv.Atoi(values[0])//q, _ = strconv.Atoi(values[1])ap := make([]int64, n+1)ap[0] = 0sc := bufio.NewScanner(os.Stdin)sc.Scan()sc.Scan()strs := strings.Split(sc.Text(), " ")for i := range strs {val, _ := strconv.Atoi(strs[i])ap[i+1] = ap[i] + int64(val)}for i := 0; i < q; i++ {fmt.Scan(&l, &r)fmt.Println(ap[r] - ap[l-1])}
}// package main// import (
//     "fmt"
// )// func main() {
//     var n, q, l, r int
//     fmt.Scan(&n, &q)
//     a := make([]int, n)
//     ap := make([]int64, n + 1)
//     ap[0] = 0//     for i := 0; i < n; i++ {
//         fmt.Scan(&a[i])
//         ap[i + 1] = ap[i] + int64(a[i])
//     }
//     for j := 0; j < q; j++ {
//         fmt.Scan(&l, &r)
//         fmt.Println(ap[r] - ap[l-1])
//     }
// }

本地goland运行:
在这里插入图片描述

但牛客上运行:
在这里插入图片描述
于是,开始对输入输出好好研究:

package mainimport ("bufio""fmt""os"
)func main() {var (n, q, l, r intin = bufio.NewReader(os.Stdin)out = bufio.NewWriter(os.Stdout))fmt.Fscan(in, &n, &q)a := make([]int, n)ap := make([]int64, n+1)ap[0] = 0for i := 0; i < n; i++ {fmt.Fscan(in, &a[i])ap[i+1] = ap[i] + int64(a[i])}for j := 0; j < q; j++ {fmt.Fscan(in, &l, &r)fmt.Fprintln(out, ap[r] - ap[l - 1])// fmt.Println(ap[r] - ap[l-1])out.Flush()}
}

在这里插入图片描述
那么在此前提下,如果第二行输入不一个个读入,用整行读入呢?
(其实到这,我就有了对自己之前行为的评价:之前代码的各种输入输出用的很混乱,想用哪一套就彻底用哪一套呗,快不快慢不慢的,看着就恶心)

package main// 前缀和很简单,往往输入数据会很变态,所以不能用fmt.Scan()和fmt.Println()
// 有好几种优化的输入输出// 用封装好的bufio.NewReader(os.Stdin)和bufio.NewWriter(os.Stdout)/*
var (n, q, l, r intin         = bufio.NewReader(os.Stdin)out        = bufio.NewWriter(os.Stdout)
)func main() {fmt.Fscan(in, &n, &q)a := make([]int, n)ap := make([]int64, n+1)ap[0] = 0for i := 0; i < n; i++ {fmt.Fscan(in, &a[i])ap[i+1] = ap[i] + int64(a[i])}for j := 0; j < q; j++ {fmt.Fscan(in, &l, &r)fmt.Fprintln(out, ap[r]-ap[l-1])out.Flush()}
}
*/// 用适合于整行读取的组合方法
/*
sc := bufio.NewScanner(os.Stdin)
bs := make([]byte, 20000 * 1024) //设置缓冲区的最大读取
readLine = func() (res string) {sc.Scan() //读一行l := strings.Split(sc.Text(), " ")var res stringfor _, s := range l {res += s}return
}
out = bufio.NewWriter(os.Stdout)scanner.Buffer(bs, len(bs)) //设置缓冲区的最大读取
cur := readLine()
fmt.Fprint(out, cur)
out.Flush()
*/import ("bufio""fmt""os""strconv""strings"
)var (n, p, l, r intsc         = bufio.NewScanner(os.Stdin) //按行扫描器out        = bufio.NewWriter(os.Stdout) //文件输出流(要用fmt.Fprint(out, ...))bs         = make([]byte, 20000*1024)   //设置缓冲区最大读取readLine   = func() (res []int) {       //把读取一行的操作封装成一个匿名函数sc.Scan()                             //扫描器读取一行strs := strings.Split(sc.Text(), " ") //将读取的字符串分割成切片res = make([]int, len(strs))          //这一句不能遗漏,返回值是切片类型,必须要有初始化for i, s := range strs {              //将切片中的每个元素转换为int类型,再存入返回值切片里x, _ := strconv.Atoi(s)res[i] = x}return}
)func main() {sc.Buffer(bs, len(bs))         //设置缓冲区读取最大数量cur1 := readLine()             //读第一行ap := make([]int64, cur1[0]+1) //前缀和数组(切片)cur2 := readLine()             //读第二行for i := range cur2 {ap[i+1] = ap[i] + int64(cur2[i]) //求前缀和}for i := 0; i < cur1[1]-1; i++ { //求要求的区间内的数值和cur := readLine()fmt.Fprintln(out, ap[cur[1]]-ap[cur[0]-1])}//最后一组单独写是为了防止最后多个换行cur := readLine()fmt.Fprint(out, ap[cur[1]]-ap[cur[0]-1])//最后一下给Flush出来out.Flush()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型在自然语言处理中的应用:性能表现和未来趋势

引言 A. AI大模型在自然语言处理中的应用背景简介 近年来&#xff0c;随着深度学习和人工智能技术的快速发展&#xff0c;越来越多的研究人员和企业开始关注应用于自然语言处理的AI大模型。这些模型采用了深层的神经网络结构&#xff0c;具有强大的学习和处理能力&#xff0c…

创建型模式--1.单例模式【巴基速递】

1. 巴基的订单 在海贼世界中&#xff0c;巴基速递是巴基依靠手下强大的越狱犯兵力&#xff0c;组建的集团海贼派遣公司&#xff0c;它的主要业务是向世界有需要的地方输送雇佣兵&#xff08;其实是不干好事儿&#xff09;。 自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 &…

【ArcGIS学习笔记】ArcMap打开就卡在文档加载界面好久不动,打开很慢,要好长时间

Arcmap之前用得好好&#xff0c;后来打开就卡在文档加载界面&#xff0c;然后界面就关闭了&#xff1f; - 知乎针对这一情况&#xff0c;主要有下面五种解决方法。其中&#xff0c;对于大部分用户而言&#xff0c;前两种方法大概率是可以解决问题的&#xff1b;…https://www.z…

RocketMQ的docker安装和SpringBoot的集成

1.Docker安装 1.1创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876networks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports…

C++模板初阶(个人笔记)

模板初阶 1.泛型编程2.函数模板2.1函数模板的实例化2.2模板参数的匹配规则 3.类模板3.1类模板的实例化 1.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 //函数重载 //交换函数的逻辑是一致的&#xff0c…

SpringBoot学习笔记四

SpringBoot学习笔记四-监听机制 1. SpringBoot监听器1.1 无需配置1.1.1 CommandLineRunner使用1.1.2 ApplicationRunner的使用1.1.3 CommandLineRunner与ApplicationRunner的区别 1.2 需要创建META-INF文件&#xff0c;并在其中创建spring.factories&#xff0c;配置相关的信息…

批量删除文件脚本

在工作中我们经常会遇到一些重复性的工作&#xff0c;如批量创建文件&#xff0c;删除文件等等。这种重复性的工作shell脚本往往能给我们带来极大的便利。 将需要删除的文件路径存放在【stt_Files_240410.rpt】随便一个 文档中即可。 下面是一个批量删除文件的一个脚本范例&…

【CSDN创作优化2】内嵌图片 `<img>` 标签`height`和`width`属性

【CSDN创作优化2】内嵌图片 标签height和width属性 写在最前面<img> 标签简介控制图像尺寸&#xff1a;height和width属性实例为什么要指定height和width注意事项 使用百分比进行响应式设计小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字…

【赛题】2024年“认证杯”数模网络挑战赛赛题发布

2024年"认证杯"数学建模网络挑战赛——正式开赛&#xff01;&#xff01;&#xff01; 赛题已发布&#xff0c;后续无偿分享各题的解题思路、参考文献、完整论文可运行代码&#xff0c;帮助大家最快时间&#xff0c;选择最适合是自己的赛题。祝大家都能取得一个好成…

[dvwa] file upload

file upload 0x01 low 直接上传.php 内容写<? eval($_POST[jj]);?> 用antsword连 路径跳两层 0x02 medium 添加了两种验证&#xff0c;格式为图片&#xff0c;大小限制小于1000 上传 POST /learndvwa/vulnerabilities/upload/ HTTP/1.1 Host: dvt.dv Content-Le…

WORD——效率提升10倍的18个神操作

1、万能F4键 在Word中F4 键的功能是重复上一步操作&#xff0c;也就说上一步你做了什么操作&#xff0c;只要按F4键&#xff0c;它就会自动帮你重来一次。比如&#xff0c;合并单元格&#xff0c;你再也不用反复去点合并按钮&#xff0c;只要合并第一个单元格后&#xff0c;剩…

四种算法(麻雀搜索算法SSA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

【嵌入式DIY实例】-基于LoRa的智慧农业及远程监控系统

基于LoRa的智慧农业及远程监控系统 文章目录 基于LoRa的智慧农业及远程监控系统1、硬件准备1.1 RYLR998 Lora 模块介绍1.2 电容式土壤湿度传感器介绍1.3 DHT11温度湿度传感器介绍1.4 DS1307 RTC模块介绍1.5 1.8寸TFT LCD显示屏1.6 硬件接线原理图1.6.1 发送端硬件接线原理图1.6…

第06章 网络传输介质

6.1 本章目标 了解双绞线分类和特性了解同轴电缆分类和特性了解光纤分类和特性了解无线传输介质分类和特性 6.2 传输介质分类 现在社会还是以有线介质为主 计算机通信 - 有线通信 - 无线通信有线通信传输介质 - 双绞线 - 同轴电缆 - 光导纤维无线通信 - 卫星 - 微波 - 红外…

【SpringBoot】-- 项目实现微信公众号扫码登录

目录 一、业务需求 二、内网穿透 三、服务器配置 ​编辑 四、依赖引入 pom.xml 五、验证服务器有效性 代码 controller类 SHA1工具类 六、用户订阅后自动回复消息 代码 controller类 MessageUtil工具类 七、用户发送文本消息后回复消息 代码 controller类 八、…

基于SpringBoot+Vue的工厂生产设备维护管理系统(源码+文档+部署+讲解)

一.系统概述 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得工厂生产设备维护信息&#xff0c;因此&#xff0c;设计一种安全高效的工厂生产设备…

示波器接上机器板子信号就正常工作,拿下来就机器不正常工作

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更新&#xff09; 【牛客网】构建从学习到职业的良性生态圈 中国计算…

GitHub 与 Git 的区别

GitHub 与 Git 的区别 1. GitHub2. GitReferences GitHub 与 Git 是完全不同的两个东西。 在 Git 中&#xff0c;开发者将源代码存入名叫 “Git 仓库” 的资料库中并加以使用。而 GitHub 则是在网络上提供 Git 仓库的一项服务。 GitHub 上公开的软件源代码全都由 Git 进行管理…

Java中的Optional类

Optional 是 Java 8 引入的一个容器对象&#xff0c;用于解决可能出现的空指针异常问题。它的主要目的是提供一种更优雅的方式来处理可能为 null 的值。 以下是关于 Optional 类的一些主要特点和用法&#xff1a; 创建 Optional 对象&#xff1a; Optional.of(T value)&#x…

C++ 引用和指针:内存地址、创建方法及应用解析

C 引用和指针 创建引用 引用变量是对现有变量的“别名”&#xff0c;它是使用 & 运算符创建的&#xff1a; string food "Pizza"; // 食物变量 string &meal food; // 对 food 的引用现在&#xff0c;我们可以使用变量名 food 或引用名 meal 来引用食…