結果

問題 No.3434 [Cherry 8th Tune N] 大きくして Hold on Card!
コンテスト
ユーザー vjudge1
提出日時 2026-03-02 04:19:38
言語 Rust
(1.93.0 + proconio + num + itertools)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
AC  
実行時間 50 ms / 2,000 ms
コード長 2,038 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,193 ms
コンパイル使用メモリ 209,532 KB
実行使用メモリ 27,828 KB
最終ジャッジ日時 2026-03-02 04:19:51
合計ジャッジ時間 11,564 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 43
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#![allow(dead_code, unused_imports)]

use std::cmp::{max, min};
use std::collections::{HashMap, HashSet, VecDeque};
use std::io::{BufRead, BufReader, BufWriter, Stdin, Stdout, Write, stdin, stdout};
use std::mem::swap;

pub struct Scanner<R> {
    reader: R,
    buffer: Vec<String>,
}

impl<R: std::io::BufRead> Scanner<R> {
    pub fn new(reader: R) -> Self {
        Self {
            reader,
            buffer: Vec::new(),
        }
    }

    pub fn cin<T: std::str::FromStr>(&mut self) -> T {
        loop {
            if let Some(token) = self.buffer.pop() {
                return token.parse().ok().expect("Failed to parse");
            }
            let mut input = String::new();
            self.reader.read_line(&mut input).expect("Failed to read");
            self.buffer = input.split_whitespace().rev().map(String::from).collect();
        }
    }
}

fn solve<R: BufRead>(scan: &mut Scanner<R>, out: &mut BufWriter<Stdout>) {
    let n = scan.cin::<usize>();
    let mut a = (0..n).map(|i| (scan.cin::<i64>(), i)).collect::<Vec<_>>();
    let b = (0..n).map(|_| scan.cin::<i64>()).collect::<Vec<_>>();
    a.sort_unstable();
    let mut pfa = vec![0; n + 1];
    let mut pfb = vec![0; n + 1];
    for (i, &a) in a.iter().enumerate() {
        pfa[i + 1] = pfa[i] + a.0;
    }
    for (i, &b) in b.iter().enumerate() {
        pfb[i + 1] = pfb[i] + b;
    }
    let mut max_profit = 0;
    let mut max_k = 0;
    for k in 0..=n {
        let profit = pfb[k] - pfa[k];
        if profit > max_profit {
            max_profit = profit;
            max_k = k;
        }
    }
    let mut ans = vec![0; n];
    for i in 0..max_k {
        ans[a[i].1] = 1;
    }
    for a in ans {
        write!(out, "{a}").ok();
    }
    writeln!(out).ok();
}

fn main() {
    let mut scan = Scanner::new(stdin().lock());
    let mut out = BufWriter::new(stdout());
    // let t = 1;
    let t = scan.cin::<usize>();
    (1..=t).for_each(|_tt| {
        // write!(out, "Case {tt}: ").ok();
        solve(&mut scan, &mut out);
    });
}
0