在洛谷使用c#刷题如何提高输入输出效率

news/2024/9/17 3:20:03

这是我目前使用的方案,有什么更优的方案欢迎大家分享

使用StreamReader和StreamWriter进行输入和输出+自己解析字符串,例如P1253

public class P1253
{public static void Main(){using (StreamReader sr = new StreamReader(Console.OpenStandardInput())){using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())){sw.AutoFlush = false;  // 禁用自动刷新以提高性能int n = ReadInt(sr);int m = ReadInt(sr);var nums = new int[n];for (int i = 0; i < n; i++){nums[i] = ReadInt(sr);}SegmentTreeSetAndAdd segmentTree = new SegmentTreeSetAndAdd(n);segmentTree.Build(nums);for (int i = 0; i < m; i++){int op = ReadInt(sr);if (op == 1){segmentTree.SetRangeValue(ReadInt(sr), ReadInt(sr), ReadInt(sr));}else if (op == 2){segmentTree.AddRangeValue(ReadInt(sr), ReadInt(sr), ReadInt(sr));}else{var max = segmentTree.QueryMax(ReadInt(sr), ReadInt(sr));sw.WriteLine(max);}}sw.Flush();  // 最后手动刷新缓冲区}}    }public static int ReadInt(StreamReader reader){int ans = 0;int read = reader.Read();bool sign = false;while (read > '9' || read < '0'){if (read == '-')sign = true;read = reader.Read();}while (read <= '9' && read >= '0'){ans = ans * 10 + read - '0';read = reader.Read();}if (sign)ans = -ans;return ans;}}

这是老的使用Console.ReadLine+Split的实现

    public static void Main(){var headInput = Console.ReadLine().Trim();var headSpit = headInput.Split(' ');int n = int.Parse(headSpit[0]);int m = int.Parse(headSpit[1]);var arrayInput = Console.ReadLine().Trim();var arraySpit = arrayInput.Split(' ');var nums = new int[n];for (int i = 0; i < arraySpit.Length; i++){nums[i] = int.Parse(arraySpit[i]);}SegmentTreeSetAndAdd segmentTree = new SegmentTreeSetAndAdd(n);segmentTree.Build(nums);for (int i = 0; i < m; i++){var methodInput = Console.ReadLine().Trim();var methodSpit = methodInput.Split(' ');int op = int.Parse(methodSpit[0]);if (op == 1){segmentTree.SetRangeValue(int.Parse(methodSpit[1]), int.Parse(methodSpit[2]), int.Parse(methodSpit[3]));}else if (op == 2){segmentTree.AddRangeValue(int.Parse(methodSpit[1]), int.Parse(methodSpit[2]), int.Parse(methodSpit[3]));}else{var max = segmentTree.QueryMax(int.Parse(methodSpit[1]), int.Parse(methodSpit[2]));Console.WriteLine(max);}}}

效率对比

Console.ReadLine+Split

StreamReader+StreamWriter

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

每天学一个 Linux 命令(12):chown

Github地址: https://github.com/mingongge/Learn-a-Linux-command-every-day命令简介 chown命令用来变更文件或目录的拥有者或所属群组,通过chown改变文件的拥有者和群组。用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的文件列表,文件名也支持通配…

表单引擎字段类型该如何设计?

在软件行业的发展过程中,从业者对于开发效率和质量提升是一直在追随的一个目标。通过复用软件模块来实现这些目标通常是一种有效的手段,从头文件引入、面向对象的封装、动态库的引入、代码生成器类工具、低代码引擎等,随着行业技术发展能复用的层次也从底层的文件逐步到界面…

apisix~14在自定义插件中调用proxy_rewrite

在 Apache APISIX 中,通过 proxy-rewrite 插件来修改上游配置时,需要确保插件的执行顺序和上下文环境正确。你提到在自己的插件中调用 proxy_rewrite.rewrite({host="new_upstream"}, ctx),但新上游没有生效,这可能是由于以下几个原因:插件执行顺序:确保你的自…

NAS安全存储怎样实现更精细的数据权限管控?

NAS存储,即网络附属存储(Network Attached Storage),是一种专用数据存储服务器,其核心特点在于将数据存储设备与网络相连,实现集中管理数据的功能。NAS存储具有以下明显优势,而被全球范围内的企业都广泛采用: 集中存储:NAS可以将所有设备(如电脑、手机、平板等)的数…

【运维自动化-配置平台】如何对主机进行纳管

主机是配置平台管控最常见的资源,也是运维日常主要的管控对象;如何对主机进行全生命周期管理呢导入主机直接导入直接导入仅适用于直连区域(default area)的主机,也就是网络跟蓝鲸平台能内网互通的。 资源–>主机–>导入主机导入后的主机在主机池-空闲机模块下,默认…

智慧仓储中数据可视化是如何应用的?

智慧仓储中数据可视化是如何应用的?在现代物流和供应链管理中,智慧仓储已成为企业提升效率、降低成本和优化运营的重要手段。而数据可视化作为智慧仓储的重要工具,通过将复杂的数据转化为直观、易理解的图表和图形,极大地提升了仓储管理的精度和效率。首先,数据可视化在库…

mysql8.0表名忽略大小写(Ubuntu24.04)

最近发现在ubuntu环境中mysql8默认是不忽略大小写的,这个在使用一些orm框架的时候可能会遇到一些问题,比如jpa会将表默认小写,如果数据库中的表是大写的这个时候就会报错: 表不存在。如何解决呢? 其实在数据库中无非是添加一个参数## mysqld.cnf[mysqld]lower_case_table_n…

centos7配置nginx

需要安装几个插件 1.pcre、pcre-develyum install -y pcre pcre-devel 2.zlib安装yum install -y zlib zlib-devel 3.安装openssl 安装nginx,下载包wget http://nginx.org/download/nginx-1.9.9.tar.gz 如果提示wget 未找到命令 用下面命令装一下sudo yum install wget继续…