fn main() {
let mut br = BufReader::new(io::stdin());
let mut bw = BufWriter::new(io::stdout());
let mut buf = String::new();
let mut problem_arr = vec![0; 10_000_003];
let mut head: bool = false;
let mut counter = 0;
let mut n = 0;
let mut params = Vec::new();
while let Ok(sz) = br.read_line(&mut buf) {
if sz > 0 {
if !head {
let mut headline = buf.trim().split(" ");
if let Some(tn) = headline.next() {
if let Ok(v) = tn.parse::<usize>() {
n = v;
} else {
break;
}
} else {
break;
}
if let Some(tn) = headline.next() {
if let Ok(v) = tn.parse::<i32>() {
counter = v;
} else {
break;
}
} else {
break;
}
head = true
} else if counter > 0 {
let mut p = buf.trim().split(" ");
params.push(ParamGroup(
p.next().unwrap().parse().unwrap(),
p.next().unwrap().parse().unwrap(),
p.next().unwrap().parse().unwrap(),
p.next().unwrap().parse().unwrap(),
));
counter -= 1;
if counter == 0 {
let ans = difference_arithmetic_procession_mode(&mut problem_arr, ¶ms, n);
bw.write_fmt(format_args!("{} {}\n", ans.0, ans.1)).unwrap();
params.clear();
head = false;
}
}
buf.clear();
} else {
break;
}
}
bw.flush().unwrap();
}
struct ParamGroup(usize, usize, i32, i32);
fn difference_arithmetic_procession_mode(
dif_arr: &mut [i32],
p: &[ParamGroup],
n: usize,
) -> (i32, i32) {
// an = a1 + (n-1)*d
// d = (an - a1)/(n-1)
// n = (end-beg)+1
// d = (an-a1)/(end-beg)
for p in p {
let &ParamGroup(l, r, beg, end) = p;
let d = (end - beg) / (r - l) as i32;
dif_arr[l] += beg;
dif_arr[l + 1] += d - beg;
dif_arr[r + 1] -= d + end;
dif_arr[r + 2] += end;
}
let mut sum = 0;
for v in dif_arr[1..=n].iter_mut() {
sum += *v;
*v = sum;
}
sum = 0;
for v in dif_arr[1..=n].iter_mut() {
sum += *v;
*v = sum;
}
let mut xor_ans = 0;
let mut max = i32::MIN;
for v in dif_arr[1..=n].iter() {
xor_ans ^= *v;
max = max.max(*v)
}
(xor_ans, max)
}
上述代码是main函数,计算函数省略了,因为每次提交结果所有用例都是wrong answer,里面总有显示read: -,我猜是读程序输出有问题
希望大手子们帮忙看一下这么处理输入输出有什么问题,感激不尽