結果

問題 No.3126 Dual Query Problem
ユーザー NakLon131
提出日時 2025-04-26 08:21:07
言語 Rust
(1.83.0 + proconio)
結果
WA  
実行時間 -
コード長 1,956 bytes
コンパイル時間 12,938 ms
コンパイル使用メモリ 402,000 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-26 08:21:28
合計ジャッジ時間 19,551 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20 WA * 12
権限があれば一括ダウンロードができます

ソースコード

diff #

fn main() {
    input!{
		n: usize, q: usize,
		x: [usize; n],
	}

	// 何回操作が必要かを数える
	let cnt = calc_controls(&x);

	// q回を超えたらNG
	if cnt > q {
		println!("No");
		return;
	}
	println!("Yes");

	// q回以下なら、実際に操作する
	exec_controls(&x, q);
}

fn calc_controls(x: &Vec<usize>) -> usize {
	let mut cnt = 0;
	let mut last_num = INF;

	for i in 0..x.len() {
		if last_num != x[i] {
			// 数字を区切る
			last_num = x[i];
			
			// セット+出力
			cnt += 2;
		}
		else {
			// 出力
			cnt += 1;
		}
	}
	cnt
}

fn exec_controls(x: &Vec<usize>, q: usize){
	let mut cnt = 0;
	let mut out_i = 0;
	let mut last_num = INF;

	for i in 0..x.len() {
		if last_num != x[i] {
			// 数字を区切る&更新
			out_i += 1;
			last_num = x[i];
			
			// セット
			println!("1 {} {}", out_i, x[i]);
			// 出力
			println!("2 {}", out_i);
			
			// セット+出力分の情報を更新
			cnt += 2;		
		}
		else {
			// 出力
			println!("2 {}", out_i);

			// 出力分の情報を更新
			cnt += 1;
		}
	}

	// q回より少ない分を適当にセット
	for _ in cnt..q {
		println!("1 {} {}", out_i, 1);
	}
}

// const MOD17: usize = 1000000007;
// const MOD93: usize = 998244353;
const INF: usize = 1 << 60;
// let dx = vec![!0, 0, 1, 0]; // 上左下右
// let dy = vec![0, !0, 0, 1]; // 上左下右
// let d = vec!{(!0, 0), (0, !0), (1, 0), (0, 1)}; // 上左下右

#[allow(unused)]
use proconio::{input, marker::Chars, marker::Usize1};

#[allow(unused)]
use std::{
	mem::swap,
	cmp::min, cmp::max,
	cmp::Reverse,
	collections::HashSet, collections::BTreeSet,
	collections::HashMap, collections::BTreeMap,
	collections::BinaryHeap,
	collections::VecDeque,
	iter::FromIterator,
};
// 配列のスペース区切り出力
#[allow(unused)]
fn vec_print<T: std::fmt::Display>(vec: &Vec<T>) {
	let sz = vec.len();
	for i in 0..sz-1 {
		print!("{} ", vec[i]);
	}
	println!("{}", vec[sz-1]);
}
0