Submission #27966946


Source Code Expand

#![allow(non_snake_case, unused)]

use proconio::{*, marker::*};
use rand::prelude::*;
use itertools::*;
use std::{ops::*, collections::BinaryHeap, collections::BTreeSet};

pub trait SetMinMax {
	fn setmin(&mut self, v: Self) -> bool;
	fn setmax(&mut self, v: Self) -> bool;
}
impl<T> SetMinMax for T where T: PartialOrd {
	fn setmin(&mut self, v: T) -> bool {
		*self > v && { *self = v; true }
	}
	fn setmax(&mut self, v: T) -> bool {
		*self < v && { *self = v; true }
	}
}

#[macro_export]
macro_rules! mat {
	($($e:expr),*) => { Vec::from(vec![$($e),*]) };
	($($e:expr,)*) => { Vec::from(vec![$($e),*]) };
	($e:expr; $d:expr) => { Vec::from(vec![$e; $d]) };
	($e:expr; $d:expr $(; $ds:expr)+) => { Vec::from(vec![mat![$e $(; $ds)*]; $d]) };
}

pub fn get_time() -> f64 {
	static mut STIME: f64 = -1.0;
	let t = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap();
	let ms = t.as_secs() as f64 + t.subsec_nanos() as f64 * 1e-9;
	unsafe {
		if STIME < 0.0 {
			STIME = ms;
		}
		ms - STIME
	}
}

pub const DIJ: [(usize, usize); 4] = [(!0, 0), (0, 1), (1, 0), (0, !0)];

pub type Output = Vec<Command>;

#[allow(non_camel_case_types)]
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Command {
	F,
	L,
	R,
	l,
	r,
	Pattern(usize),
	Rep(usize, Output)
}

impl std::fmt::Display for Command {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		match self {
			Command::F => write!(f, "F")?,
			Command::L => write!(f, "L")?,
			Command::R => write!(f, "R")?,
			Command::l => write!(f, "l")?,
			Command::r => write!(f, "r")?,
			Command::Pattern(i) => {
				match *i {
					// command("RllF"), command("LrrF")
					0 => write!(f, "RllF")?,
					1 => write!(f, "FRll")?,
					2 => write!(f, "lFRl")?,
					3 => write!(f, "llFR")?,
					4 => write!(f, "LrrF")?,
					5 => write!(f, "FLrr")?,
					6 => write!(f, "rFLr")?,
					7 => write!(f, "rrFL")?,
					_ => unreachable!()
				}
			},
			Command::Rep(r, cs) => {
				write!(f, "{}", r)?;
				if cs.len() >= 2 || match cs[0] { Command::Rep(_, _) | Command::Pattern(_) => true, _ => false } {
					write!(f, "(")?;
					for c in cs.iter() {
						write!(f, "{}", c)?;
					}
					write!(f, ")")?;
				} else {
					write!(f, "{}", cs[0])?;
				}
			}
		}
		Ok(())
	}
}

const N: usize = 20;
const T: usize = 5000;

pub struct Input {
	si: usize,
	sj: usize,
	hs: Vec<Vec<bool>>,
	vs: Vec<Vec<bool>>,
	pat: Vec<Vec<Vec<Vec<(usize, usize, usize)>>>>
}

pub fn read_input() -> Input {
	input! {
		si: usize,
		sj: usize,
		hs: [Chars; N],
		vs: [Chars; N - 1],
	}
	let hs = hs.into_iter().map(|h| h.into_iter().map(|a| a == '1').collect()).collect();
	let vs = vs.into_iter().map(|v| v.into_iter().map(|a| a == '1').collect()).collect();
	let mut input = Input { si, sj, hs, vs, pat: mat![(!0, !0, !0); 8; N; N; 4] };
	let mut state = State::new(&input);
	for k in 0..8 {
		let mut p = [command("RllF"), command("LrrF")][k / 4].clone();
		for _ in 0..k % 4 {
			let c = p.pop().unwrap();
			p.insert(0, c);
		}
		for i in 0..N {
			for j in 0..N {
				for d in 0..4 {
					state.i = i;
					state.j = j;
					state.d = d;
					state.t = 0;
					state.apply(&input, &p);
					input.pat[k][i][j][d] = (state.i, state.j, state.d);
				}
			}
		}
	}
	input
}

impl Input {
	fn can_move(&self, i: usize, j: usize, d: usize) -> bool {
		match d {
			0 => i > 0 && !self.vs[i - 1][j],
			1 => j < N - 1 && !self.hs[i][j],
			2 => i < N - 1 && !self.vs[i][j],
			3 => j > 0 && !self.hs[i][j - 1],
			_ => unreachable!()
		}
	}
}

fn write_output(out: &Output) {
	let out = out.iter().join("");
	eprintln!("length = {}", out.len());
	println!("{}", out);
}

#[derive(Clone, Debug)]
struct State {
	visited: Vec<Vec<bool>>,
	num_visited: usize,
	out: Output,
	i: usize,
	j: usize,
	d: usize,
	t: usize,
}

impl State {
	fn new(input: &Input) -> Self {
		let mut visited = mat![false; N; N];
		visited[input.si][input.sj] = true;
		Self {
			visited,
			num_visited: 1,
			out: vec![],
			i: input.si,
			j: input.sj,
			d: 0,
			t: 0,
		}
	}
	fn apply(&mut self, input: &Input, out: &[Command]) {
		// solution::profile!(apply);
		for c in out.iter() {
			if self.t >= T {
				break;
			}
			match c {
				Command::L => {
					self.d = (self.d + 3) % 4;
					self.t += 1;
				},
				Command::R => {
					self.d = (self.d + 1) % 4;
					self.t += 1;
				},
				Command::F => {
					if input.can_move(self.i, self.j, self.d) {
						self.i += DIJ[self.d].0;
						self.j += DIJ[self.d].1;
						if self.visited[self.i][self.j].setmax(true) {
							self.num_visited += 1;
						}
					}
					self.t += 1;
				},
				Command::l => {
					if !input.can_move(self.i, self.j, self.d) {
						self.d = (self.d + 3) % 4;
					}
					self.t += 1;
				},
				Command::r => {
					if !input.can_move(self.i, self.j, self.d) {
						self.d = (self.d + 1) % 4;
					}
					self.t += 1;
				},
				Command::Rep(n, cs) => {
					for _ in 0..*n {
						self.apply(input, &cs);
						if self.t >= T {
							break;
						}
					}
				},
				&Command::Pattern(k) => {
					if self.t + 4 > T {
						let mut p = [command("RllF"), command("LrrF")][k / 4].clone();
						for _ in 0..k % 4 {
							let c = p.pop().unwrap();
							p.insert(0, c);
						}
						self.apply(input, &p);
					} else {
						let (i, j, d) = input.pat[k][self.i][self.j][self.d];
						self.i = i;
						self.j = j;
						self.d = d;
						if self.visited[i][j].setmax(true) {
							self.num_visited += 1;
						}
						self.t += 4;
					}
				}
			}
		}
	}
	fn mst(&self, input: &Input) -> usize {
		// solution::profile!(mst);
		let mut dist = mat![1000000; N; N];
		let mut fixed = mat![false; N; N];
		let mut que = BinaryHeap::new();
		dist[self.i][self.j] = 0;
		que.push((0, self.i, self.j));
		let mut total = 0;
		while let Some((c, i, j)) = que.pop() {
			if fixed[i][j] || dist[i][j] != -c {
				continue;
			}
			let mut cost = dist[i][j];
			if !fixed[i][j] && !self.visited[i][j] {
				fixed[i][j] = true;
				total += dist[i][j];
				cost = 0;
			}
			for d in 0..4 {
				if input.can_move(i, j, d) {
					let i2 = i + DIJ[d].0;
					let j2 = j + DIJ[d].1;
					if !fixed[i2][j2] && dist[i2][j2].setmin(cost + 1) {
						que.push((-dist[i2][j2], i2, j2));
					}
				}
			}
		}
		N * N - (total as usize).min(N * N)
	}
}

const P: f64 = 0.3;
const G: f64 = 8.0;
const B: usize = 1000;

fn eval(len: usize, t0: usize, t: usize, m0: usize, m: usize) -> f64 {
	if m > m0 {
		let gain = m - m0;
		if (t - t0) as f64 / (gain as f64) < G || m as f64 / (N * N) as f64 >= (t as f64 / T as f64).powf(P) {
			gain as f64 / len as f64 + gain as f64 / (t - t0) as f64 * 0.01
		} else {
			0.0
		}
	} else {
		0.0
	}
}

fn eval2(len: usize, t0: usize, t: usize, m0: usize, m: usize) -> f64 {
	if m > m0 {
		let gain = m - m0;
		if (t - t0) as f64 / (gain as f64) < 12.5 || m as f64 / (N * N) as f64 >= t as f64 / T as f64 {
			gain as f64 / len as f64 + gain as f64 / (t - t0) as f64 * 0.01
		} else {
			0.0
		}
	} else {
		0.0
	}
}

fn command(s: &str) -> Vec<Command> {
	s.chars().map(|c| match c {
		'R' => Command::R,
		'L' => Command::L,
		'r' => Command::r,
		'l' => Command::l,
		'F' => Command::F,
		_ => panic!()
	}).collect()
}

fn commands(ss: &[&str]) -> Vec<Vec<Command>> {
	ss.iter().map(|s| command(s)).collect()
}

fn rec(input: &Input, state: &State, out: &Vec<Command>, best: &mut Vec<(f64, Vec<Command>)>) {
	// solution::profile!(rec);
	if out.len() > 0 && out.iter().any(|c| c == &Command::F) {
		let mut new_state = state.clone();
		let mut prev = BTreeSet::new();
		for r in 1.. {
			if !prev.insert((new_state.i, new_state.j, new_state.d)) {
				break;
			}
			new_state.apply(input, out);
			let mut length = out.len();
			if r > 1 {
				length += r.to_string().len();
				if out.len() > 1 || match out[0] { Command::Rep(_, _) | Command::Pattern(_) => true, _ => false } {
					length += 2;
				}
			}
			let score = eval(length, state.t, new_state.t, state.num_visited, new_state.num_visited);
			if score > 0.0 && (best.len() < B || best.last().unwrap().0 < score) {
				let out = if r == 1 {
					out.clone()
				} else {
					vec![Command::Rep(r, out.clone())]
				};
				if best.len() < B {
					best.push((score, out));
				} else {
					let mut p = best.len() - 1;
					best[p] = (score, out);
					while p > 0 && best[p - 1].0 < score {
						best.swap(p - 1, p);
						p -= 1;
					}
				}
			}
			if new_state.t >= T {
				break;
			}
		}
	}
	if out.len() == 6 {
		return;
	}
	for c in vec![Command::L, Command::R, Command::F, Command::l, Command::r] {
		if out.len() > 0 {
			match (&out[out.len() - 1], &c) {
				(&Command::L, &Command::R) | (&Command::R, &Command::L) | (&Command::R, &Command::R) => continue,
				_ => ()
			}
		}
		let mut out = out.clone();
		out.push(c);
		rec(input, state, &out, best);
	}
}

fn rec2(input: &Input, state: &State, out: &Vec<Command>, t: usize, length: usize, best: &mut Vec<(f64, Vec<Command>)>) {
	// solution::profile!(rec2);
	for s in if length == 4 { commands(&["", "R", "L", "F", "RF", "LF", "FR", "FL"]) } else { vec![vec![]] } {
		let mut new_state = state.clone();
		let mut prev = BTreeSet::new();
		new_state.apply(input, &s);
		let length = length + s.len();
		for r in 1.. {
			if !prev.insert((new_state.i, new_state.j, new_state.d)) {
				break;
			}
			new_state.apply(input, out);
			let mut length = length;
			if r > 1 {
				length += r.to_string().len() + 2;
			}
			let score = eval(length, state.t, new_state.t, state.num_visited, new_state.num_visited);
			if score > 0.0 && (best.len() < B || best.last().unwrap().0 < score) {
				let out = if r == 1 {
					s.iter().chain(out).cloned().collect()
				} else {
					s.iter().cloned().chain(vec![Command::Rep(r, out.clone())]).collect()
				};
				if best.len() < B {
					best.push((score, out));
				} else {
					let mut p = best.len() - 1;
					best[p] = (score, out);
					while p > 0 && best[p - 1].0 < score {
						best.swap(p - 1, p);
						p -= 1;
					}
				}
			}
			if new_state.t >= T {
				break;
			}
			if r >= 2 && length < 10 {
				let t = t * r + s.len();
				for c in &[Command::L, Command::R, Command::l, Command::r, Command::F] {
					rec2(input, state, &s.iter().cloned().chain(vec![Command::Rep(r, out.clone()), c.clone()]).collect(), t + 1, length + 1, best);
					if length < 9 {
						for c2 in &[Command::L, Command::R, Command::l, Command::r, Command::F] {
							if c == &Command::L && c2 == &Command::R || c == &Command::R && c2 == &Command::L || c == &Command::R && c2 == &Command::R {
								continue;
							}
							rec2(input, state, &s.iter().cloned().chain(vec![Command::Rep(r, out.clone()), c.clone(), c2.clone()]).collect(), t + 2, length + 2, best);
						}
					}
				}
				for k in 0..8 {
					rec2(input, state, &s.iter().cloned().chain(vec![Command::Rep(r, out.clone()), Command::Pattern(k)]).collect(), t + 4, length + 4, best);
					if length < 8 {
						for r2 in 2..10 {
							rec2(input, state, &s.iter().cloned().chain(vec![Command::Rep(r, out.clone()), Command::Rep(r2, vec![Command::Pattern(k)])]).collect(), t + 4 * r2, length + 7, best);
						}
					}
				}
			}
		}
	}
}

fn rep(input: &Input, state: &State, best: &mut Vec<(f64, Vec<Command>)>) {
	// solution::profile!(rep);
	let t0 = state.t;
	let m0 = state.num_visited;
	for c in commands(&["", "R", "L", "F", "RF", "LF", "FR", "FL"]) {
		let mut state = state.clone();
		state.apply(input, &c);
		state.out.extend(c.clone());
		for s in 0..state.out.len() {
			let mut new_state = state.clone();
			let mut prev = BTreeSet::new();
			for r in 2.. {
				if !prev.insert((new_state.i, new_state.j, new_state.d)) {
					break;
				}
				new_state.apply(input, &state.out[s..]);
				let length = r.to_string().len() + 2 + c.len();
				
				let score = eval(length, state.t, new_state.t, m0, new_state.num_visited);
				if score > 0.0 && (best.len() < B || best.last().unwrap().0 < score) {
					let mut out = state.out.clone();
					let tmp = out.drain(s..).collect::<Vec<_>>();
					out.push(Command::Rep(r, tmp));
					if best.len() < B {
						best.push((score, out));
					} else {
						let mut p = best.len() - 1;
						best[p] = (score, out);
						while p > 0 && best[p - 1].0 < score {
							best.swap(p - 1, p);
							p -= 1;
						}
					}
				}
				if new_state.t >= T {
					break;
				}
			}
		}
	}
}

const INF: i32 = 1000000000;

fn dij(input: &Input, state: &mut State) {
	// solution::profile!(dij);
	let mut dist = mat![INF; N; N; 4];
	let mut prev = mat![(!0, !0, !0, Command::L); N; N; 4];
	dist[state.i][state.j][state.d] = 0;
	let mut que = BinaryHeap::new();
	que.push((0, state.i, state.j, state.d));
	while let Some((k, i, j, d)) = que.pop() {
		let k = -k;
		if k != dist[i][j][d] {
			continue;
		}
		if !state.visited[i][j] {
			let mut i = i;
			let mut j = j;
			let mut d = d;
			let mut cs = vec![];
			while (i, j, d) != (state.i, state.j, state.d) {
				let (pi, pj, pd, c) = prev[i][j][d].clone();
				cs.push(c);
				i = pi;
				j = pj;
				d = pd;
			}
			cs.reverse();
			cs = vec![cs[0].clone()];
			state.apply(input, &cs);
			state.out.extend(cs);
			return;
		}
		if dist[i][j][(d + 3) % 4].setmin(k + 1) {
			prev[i][j][(d + 3) % 4] = (i, j, d, Command::L);
			que.push((-k - 1, i, j, (d + 3) % 4));
		}
		if dist[i][j][(d + 1) % 4].setmin(k + 1) {
			prev[i][j][(d + 1) % 4] = (i, j, d, Command::R);
			que.push((-k - 1, i, j, (d + 1) % 4));
		}
		let mut i2 = i;
		let mut j2 = j;
		for n in 1.. {
			if !input.can_move(i2, j2, d) {
				break;
			}
			i2 += DIJ[d].0;
			j2 += DIJ[d].1;
			if n == 1 {
				if dist[i2][j2][d].setmin(k + 1) {
					prev[i2][j2][d] = (i, j, d, Command::F);
					que.push((-k - 1, i2, j2, d));
				}
			} else {
				let k2 = k + n.to_string().len() as i32;
				if dist[i2][j2][d].setmin(k2) {
					prev[i2][j2][d] = (i, j, d, Command::Rep(n, vec![Command::F]));
					que.push((-k2, i2, j2, d));
				}
			}
		}
	}
	panic!();
}

fn solve(input: &Input) -> Output {
	let mut state = State::new(input);
	while state.num_visited < N * N && state.t < T {
		eprintln!("{}", state.out.iter().join(""));
		eprintln!("L = {}, M = {}, M' = {}, t = {}", state.out.iter().join("").len(), state.num_visited, state.mst(input), state.t);
		for i in 0..N {
			for j in 0..N {
				if state.visited[i][j] {
					eprint!("1");
				} else {
					eprint!("0");
				}
			}
			eprintln!();
		}
		let mut best = vec![];
		rec(&input, &state, &mut vec![], &mut best);
		for k in 0..8 {
			rec2(&input, &state, &vec![Command::Pattern(k)], 4, 4, &mut best);
		}
		for b in &mut best {
			b.1 = state.out.iter().cloned().chain(b.1.clone()).collect();
		}
		rep(&input, &state, &mut best);
		let mut max = 0.0;
		let mut best_out = vec![];
		let t0 = state.t;
		let m0 = state.mst(input);
		for (_score, out) in best {
			let mut state = State::new(input);
			state.apply(input, &out);
			if max.setmax(eval2(out.iter().join("").len(), t0, state.t, m0, state.mst(input))) {
				best_out = out;
			}
		}
		if max > 0.0 {
			state = State::new(input);
			state.apply(input, &best_out);
			state.out = best_out;
		} else {
			dij(input, &mut state);
		}
		// let mut state0 = State::new(input);
		// state0.apply(input, &state.out);
		// assert_eq!(state0.num_visited, state.num_visited);
		// assert_eq!(state0.i, state.i);
		// assert_eq!(state0.j, state.j);
		// assert_eq!(state0.d, state.d);
	}
	eprintln!("L = {}, M = {}, M' = {}, t = {}", state.out.iter().join("").len(), state.num_visited, state.mst(input), state.t);
	if state.num_visited != N * N {
		println!("orz");
	}
	state.out
}

fn main() {
	get_time();
	let input = read_input();
	let out = solve(&input);
	eprintln!("Time = {:.3}", get_time());
	write_output(&out);
	// solution::write_profile();
}

Submission Info

Submission Time
Task A - Code Golf for Robot Vacuums
User wata_admin
Language Rust (1.42.0)
Score 65871276
Code Size 16329 Byte
Status AC
Exec Time 1768 ms
Memory 5816 KiB

Judge Result

Set Name test_ALL
Score / Max Score 65871276 / 100000000
Status
AC × 100
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt
Case Name Status Exec Time Memory
test_0000.txt AC 861 ms 4800 KiB
test_0001.txt AC 810 ms 4416 KiB
test_0002.txt AC 839 ms 4280 KiB
test_0003.txt AC 712 ms 4584 KiB
test_0004.txt AC 671 ms 4596 KiB
test_0005.txt AC 1335 ms 4748 KiB
test_0006.txt AC 1033 ms 4200 KiB
test_0007.txt AC 976 ms 4696 KiB
test_0008.txt AC 1245 ms 4480 KiB
test_0009.txt AC 928 ms 4716 KiB
test_0010.txt AC 831 ms 4432 KiB
test_0011.txt AC 928 ms 4932 KiB
test_0012.txt AC 930 ms 4988 KiB
test_0013.txt AC 737 ms 4412 KiB
test_0014.txt AC 542 ms 4256 KiB
test_0015.txt AC 716 ms 4564 KiB
test_0016.txt AC 1404 ms 5060 KiB
test_0017.txt AC 914 ms 4724 KiB
test_0018.txt AC 622 ms 4196 KiB
test_0019.txt AC 1324 ms 4656 KiB
test_0020.txt AC 934 ms 4552 KiB
test_0021.txt AC 786 ms 4520 KiB
test_0022.txt AC 676 ms 4512 KiB
test_0023.txt AC 851 ms 4612 KiB
test_0024.txt AC 1101 ms 4560 KiB
test_0025.txt AC 571 ms 4216 KiB
test_0026.txt AC 393 ms 4056 KiB
test_0027.txt AC 747 ms 4532 KiB
test_0028.txt AC 825 ms 4248 KiB
test_0029.txt AC 915 ms 4444 KiB
test_0030.txt AC 1273 ms 4744 KiB
test_0031.txt AC 513 ms 4160 KiB
test_0032.txt AC 1049 ms 4972 KiB
test_0033.txt AC 449 ms 4152 KiB
test_0034.txt AC 796 ms 4520 KiB
test_0035.txt AC 924 ms 4612 KiB
test_0036.txt AC 812 ms 4480 KiB
test_0037.txt AC 1768 ms 5816 KiB
test_0038.txt AC 605 ms 4128 KiB
test_0039.txt AC 1151 ms 4464 KiB
test_0040.txt AC 526 ms 4172 KiB
test_0041.txt AC 916 ms 4660 KiB
test_0042.txt AC 403 ms 4072 KiB
test_0043.txt AC 499 ms 4180 KiB
test_0044.txt AC 1464 ms 4368 KiB
test_0045.txt AC 395 ms 3876 KiB
test_0046.txt AC 960 ms 4712 KiB
test_0047.txt AC 940 ms 4196 KiB
test_0048.txt AC 762 ms 4588 KiB
test_0049.txt AC 974 ms 4540 KiB
test_0050.txt AC 1006 ms 4504 KiB
test_0051.txt AC 357 ms 4036 KiB
test_0052.txt AC 1469 ms 4536 KiB
test_0053.txt AC 1150 ms 4480 KiB
test_0054.txt AC 711 ms 4576 KiB
test_0055.txt AC 991 ms 4424 KiB
test_0056.txt AC 902 ms 4440 KiB
test_0057.txt AC 1338 ms 4776 KiB
test_0058.txt AC 1476 ms 4980 KiB
test_0059.txt AC 1293 ms 4808 KiB
test_0060.txt AC 484 ms 4204 KiB
test_0061.txt AC 762 ms 3900 KiB
test_0062.txt AC 1166 ms 4944 KiB
test_0063.txt AC 1114 ms 4716 KiB
test_0064.txt AC 803 ms 4296 KiB
test_0065.txt AC 1198 ms 4476 KiB
test_0066.txt AC 1200 ms 5380 KiB
test_0067.txt AC 864 ms 4436 KiB
test_0068.txt AC 858 ms 4840 KiB
test_0069.txt AC 516 ms 4320 KiB
test_0070.txt AC 1113 ms 5188 KiB
test_0071.txt AC 569 ms 4344 KiB
test_0072.txt AC 538 ms 4220 KiB
test_0073.txt AC 1130 ms 5520 KiB
test_0074.txt AC 958 ms 4856 KiB
test_0075.txt AC 729 ms 4528 KiB
test_0076.txt AC 654 ms 4392 KiB
test_0077.txt AC 957 ms 4864 KiB
test_0078.txt AC 1024 ms 4604 KiB
test_0079.txt AC 789 ms 4276 KiB
test_0080.txt AC 839 ms 4916 KiB
test_0081.txt AC 803 ms 4656 KiB
test_0082.txt AC 563 ms 4148 KiB
test_0083.txt AC 1017 ms 4552 KiB
test_0084.txt AC 844 ms 4416 KiB
test_0085.txt AC 959 ms 4496 KiB
test_0086.txt AC 1479 ms 5176 KiB
test_0087.txt AC 535 ms 4108 KiB
test_0088.txt AC 1086 ms 4716 KiB
test_0089.txt AC 718 ms 4388 KiB
test_0090.txt AC 1126 ms 4204 KiB
test_0091.txt AC 511 ms 4292 KiB
test_0092.txt AC 516 ms 4260 KiB
test_0093.txt AC 561 ms 4260 KiB
test_0094.txt AC 518 ms 4184 KiB
test_0095.txt AC 1581 ms 4884 KiB
test_0096.txt AC 1606 ms 4932 KiB
test_0097.txt AC 1128 ms 4912 KiB
test_0098.txt AC 771 ms 4296 KiB
test_0099.txt AC 1185 ms 4500 KiB