我的问题已得到部分回答,因此我对它进行了修改,以回应从评论和其他实验中学到的知识。
总而言之,我想要一个用于编程比赛的快速I / O例程,在该例程中,一个文件即可解决问题,而无需外部包装。它应从BufRead(标准输入或文件)空白序列中读取标记。标记可以是整数,浮点数或ASCII词,用空格和换行符分隔,因此看来我应该FromStr一般支持类型。少数问题是交互式的,这意味着一开始并不是所有输入都可用,但是总会出现完整的问题。
对于上下文,这是导致我在此处发布的讨论。有人编写了非常快速的自定义代码,以直接从的&[u8]输出中解析整数BufRead::fill_buf(),但在中不是通用的FromStr。
到目前为止,这是我最好的解决方案(强调Scanner结构):
use std::io::{self, prelude::*};
fn solve<B: BufRead, W: Write>(mut scan: Scanner<B>, mut w: W) {
let n = scan.token();
let mut a = Vec::with_capacity(n);
let mut b = Vec::with_capacity(n);
for _ in 0..n {
a.push(scan.token::<i64>());
b.push(scan.token::<i64>());
}
let mut order: Vec<_> = (0..n).collect();
order.sort_by_key(|&i| b[i] - a[i]);
let ans: i64 = order
.into_iter()
.enumerate()
.map(|(i, x)| a[x] * …Run Code Online (Sandbox Code Playgroud)