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
Judge Result
| Set Name |
test_ALL |
| Score / Max Score |
65871276 / 100000000 |
| Status |
|
| 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 |