【P4231求助】rust代码提交超时
  • 板块题目总版
  • 楼主mouselee
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/17 16:47
  • 上次更新2024/10/17 19:25:44
查看原帖
【P4231求助】rust代码提交超时
1440441
mouselee楼主2024/10/17 16:47

提交代码

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, &params, 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: -,我猜是读程序输出有问题

求助内容

希望大手子们帮忙看一下这么处理输入输出有什么问题,感激不尽

2024/10/17 16:47
加载中...