提出 #27962539
ソースコード 拡げる
use grid::Coordinate;
#[allow(unused_imports)]
use proconio::*;
#[allow(unused_imports)]
use rand::prelude::*;
use std::{collections::VecDeque, time::Instant};
#[allow(unused_macros)]
macro_rules! chmin {
($base:expr, $($cmps:expr),+ $(,)*) => {{
let cmp_min = min!($($cmps),+);
if $base > cmp_min {
$base = cmp_min;
true
} else {
false
}
}};
}
#[allow(unused_macros)]
macro_rules! chmax {
($base:expr, $($cmps:expr),+ $(,)*) => {{
let cmp_max = max!($($cmps),+);
if $base < cmp_max {
$base = cmp_max;
true
} else {
false
}
}};
}
#[allow(unused_macros)]
macro_rules! min {
($a:expr $(,)*) => {{
$a
}};
($a:expr, $b:expr $(,)*) => {{
std::cmp::min($a, $b)
}};
($a:expr, $($rest:expr),+ $(,)*) => {{
std::cmp::min($a, min!($($rest),+))
}};
}
#[allow(unused_macros)]
macro_rules! max {
($a:expr $(,)*) => {{
$a
}};
($a:expr, $b:expr $(,)*) => {{
std::cmp::max($a, $b)
}};
($a:expr, $($rest:expr),+ $(,)*) => {{
std::cmp::max($a, max!($($rest),+))
}};
}
#[allow(unused_macros)]
macro_rules! mat {
($e:expr; $d:expr) => { vec![$e; $d] };
($e:expr; $d:expr $(; $ds:expr)+) => { vec![mat![$e $(; $ds)*]; $d] };
}
const N: usize = 20;
const MAX_TURN: usize = 5000;
const INIT_TURN: usize = 4000;
const U: usize = 0;
const R: usize = 1;
const D: usize = 2;
const L: usize = 3;
#[derive(Debug, Clone)]
struct Input {
n: usize,
start: Coordinate,
graph: Vec<Vec<[Option<Coordinate>; 4]>>,
since: Instant,
}
impl Input {
fn new(start: Coordinate, graph: Vec<Vec<[Option<Coordinate>; 4]>>) -> Self {
let since = Instant::now();
Self {
n: N,
start,
graph,
since,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum Command {
L,
R,
l,
r,
F,
}
impl ToString for Command {
fn to_string(&self) -> String {
match self {
Command::L => String::from("L"),
Command::R => String::from("R"),
Command::l => String::from("l"),
Command::r => String::from("r"),
Command::F => String::from("F"),
}
}
}
enum Operation {
Single(usize, Command),
Multiple(usize, Vec<Operation>),
}
impl Operation {
fn Apply(
&self,
input: &Input,
mut coordinate: Coordinate,
mut direction: usize,
mut cleaned: Vec<Vec<bool>>,
mut turn: usize,
) -> (Coordinate, usize, Vec<Vec<bool>>, usize) {
match self {
Operation::Single(rep, command) => {
for _ in 0..*rep {
if turn >= MAX_TURN {
break;
}
let edges = &input.graph[coordinate.row][coordinate.col];
match command {
Command::L => direction = direction.wrapping_sub(1) % 4,
Command::R => direction = (direction + 1) % 4,
Command::l => {
if edges[direction] == None {
direction = direction.wrapping_sub(1) % 4;
}
}
Command::r => {
if edges[direction] == None {
direction = (direction + 1) % 4;
}
}
Command::F => {
if let Some(next) = edges[direction] {
coordinate = next;
cleaned[next.row][next.col] = true;
}
}
}
turn += 1;
}
}
Operation::Multiple(rep, operation) => {
for _ in 0..*rep {
if turn >= MAX_TURN {
break;
}
for op in operation.iter() {
if turn >= MAX_TURN {
break;
}
let (c, d, cl, t) = op.Apply(input, coordinate, direction, cleaned, turn);
coordinate = c;
direction = d;
cleaned = cl;
turn = t;
}
}
}
}
(coordinate, direction, cleaned, turn)
}
}
impl ToString for Operation {
fn to_string(&self) -> String {
match self {
Operation::Single(rep, command) => {
let mut str = String::new();
if *rep > 1 {
for c in rep.to_string().chars() {
str.push(c);
}
}
for c in command.to_string().chars() {
str.push(c);
}
str
}
Operation::Multiple(rep, operation) => {
let mut str = String::new();
if *rep > 1 {
for c in rep.to_string().chars() {
str.push(c);
}
str.push('(');
}
for op in operation.iter() {
for c in op.to_string().chars() {
str.push(c);
}
}
if *rep > 1 {
str.push(')');
}
str
}
}
}
}
fn main() {
let input = read_input();
let operation = solve(&input);
println!("{}", operation.to_string());
eprintln!("{}", calc_score(&input, &operation));
}
fn read_input() -> Input {
input! {
s_row: usize,
s_col: usize,
}
let start = Coordinate::new(s_row, s_col);
let mut graph = mat![[None; 4]; N; N];
for row in 0..N {
input! {
s: String
}
for (col, c) in s.chars().enumerate() {
if c == '0' {
graph[row][col][R] = Some(Coordinate::new(row, col + 1));
graph[row][col + 1][L] = Some(Coordinate::new(row, col));
}
}
}
for row in 0..(N - 1) {
input! {
s: String
}
for (col, c) in s.chars().enumerate() {
if c == '0' {
graph[row][col][D] = Some(Coordinate::new(row + 1, col));
graph[row + 1][col][U] = Some(Coordinate::new(row, col));
}
}
}
let input = Input::new(start, graph);
input
}
fn solve(input: &Input) -> Operation {
let init_operation = get_best_init_operation(input);
let (init_coordinate, init_direction, cleaned) = generate_init_state(input);
let (init_coordinate, init_direction, cleaned, _) =
init_operation.Apply(input, init_coordinate, init_direction, cleaned, 0);
let distances = calc_dists(input);
let unvisited = get_unvisited(&cleaned);
if unvisited.len() == 0 {
return init_operation;
}
let tsp_perm = tsp(init_coordinate, init_direction, &unvisited, &distances);
let after_operation = get_operation(
input,
init_coordinate,
init_direction,
0,
&unvisited,
&tsp_perm,
);
Operation::Multiple(1, vec![init_operation, after_operation])
}
fn get_best_init_operation(input: &Input) -> Operation {
let mut best_score = 0;
let mut best_operation = Operation::Single(1, Command::F);
for operation in generate_init_candidates() {
let (coordinate, direction, cleaned) = generate_init_state(input);
let (_, _, cleaned, _) =
operation.Apply(input, coordinate, direction, cleaned, 0);
let score = calc_score(input, &operation);
if chmax!(best_score, score) {
best_operation = operation;
}
}
best_operation
}
fn generate_init_state(input: &Input) -> (Coordinate, usize, Vec<Vec<bool>>) {
let coordinate = input.start;
let direction = U;
let mut cleaned = mat![false; N; N];
cleaned[coordinate.row][coordinate.col] = true;
(coordinate, direction, cleaned)
}
fn generate_init_candidates() -> Vec<Operation> {
let mut candidates = vec![];
for left in 1..15 {
for right in 1..15 {
let rep = INIT_TURN / (4 * (left + right));
let operation = Operation::Multiple(
rep,
vec![
Operation::Multiple(
left,
vec![
Operation::Single(1, Command::L),
Operation::Single(1, Command::r),
Operation::Single(1, Command::r),
Operation::Single(1, Command::F),
],
),
Operation::Multiple(
right,
vec![
Operation::Single(1, Command::R),
Operation::Single(1, Command::l),
Operation::Single(1, Command::l),
Operation::Single(1, Command::F),
],
),
],
);
candidates.push(operation);
}
}
candidates
}
fn calc_dists(input: &Input) -> Vec<Vec<i32>> {
// TODO: 関係あるやつだけに絞る?現状133msくらい
const LENGTH: usize = N * N * 4 * 3;
let mut distances = mat![0; LENGTH; LENGTH];
for row in 0..N {
for col in 0..N {
let coordinate = Coordinate::new(row, col);
for dir in 0..4 {
for flag in 0..3 {
let index = to_index(row, col, dir, flag);
let distances = &mut distances[index];
let dists = calc_dist(input, coordinate, dir, flag);
let mut index = 0;
for row in 0..N {
for col in 0..N {
for dir in 0..4 {
for flag in 0..3 {
distances[index] = dists[row][col][dir][flag];
index += 1;
}
}
}
}
}
}
}
}
distances
}
fn calc_dist(
input: &Input,
start_coordinate: Coordinate,
start_direction: usize,
flag: usize,
) -> Vec<Vec<[[i32; 3]; 4]>> {
let mut distances = mat![[[100000000; 3]; 4]; N; N];
let mut queue = VecDeque::new();
distances[start_coordinate.row][start_coordinate.col][start_direction][flag] = 0;
queue.push_back((
start_coordinate.row,
start_coordinate.col,
start_direction,
flag,
));
while let Some((row, col, dir, flag)) = queue.pop_front() {
let dist = distances[row][col][dir][flag];
// Forward
if let Some(next) = input.graph[row][col][dir] {
// 9 -> 10の時は考慮できないけどええやろ
if flag == 2 {
if chmin!(distances[next.row][next.col][dir][flag], dist) {
queue.push_front((next.row, next.col, dir, flag));
}
} else if flag < 2 {
if chmin!(distances[next.row][next.col][dir][flag + 1], dist + 1) {
queue.push_back((next.row, next.col, dir, flag + 1));
}
}
}
// Left
let next_dir = dir.wrapping_sub(1) % 4;
if chmin!(distances[row][col][next_dir][0], dist + 1) {
queue.push_back((row, col, next_dir, 0));
}
// Right
let next_dir = (dir + 1) % 4;
if chmin!(distances[row][col][next_dir][0], dist + 1) {
queue.push_back((row, col, next_dir, 0));
}
}
distances
}
fn get_unvisited(cleaned: &[Vec<bool>]) -> Vec<Coordinate> {
let mut unvisited = vec![];
for row in 0..N {
for col in 0..N {
if !cleaned[row][col] {
unvisited.push(Coordinate::new(row, col));
}
}
}
unvisited
}
fn tsp(
mut coordinate: Coordinate,
mut direction: usize,
to_visits: &[Coordinate],
distances: &[Vec<i32>],
) -> Vec<(usize, usize, usize)> {
let mut visited = vec![false; to_visits.len()];
let mut flag = 0;
let mut results = Vec::with_capacity(to_visits.len());
// とりあえずNearest Neighbor
for _ in 0..visited.len() {
let dists = &distances[to_index(coordinate.row, coordinate.col, direction, flag)];
let mut best_dist = std::i32::MAX;
let mut best_index = 0;
let mut best_dir = 0;
let mut best_flag = 0;
for (i, next) in to_visits.iter().enumerate() {
if visited[i] {
continue;
}
for dir in 0..4 {
for fl in 0..3 {
let d = dists[to_index(next.row, next.col, dir, fl)];
if chmin!(best_dist, d) {
best_index = i;
best_dir = dir;
best_flag = fl;
} else if best_dist == d && chmax!(best_flag, fl) {
best_index = i;
best_dir = dir;
}
}
}
}
eprintln!(
"({}, {}) -> ({}, {}) : {}",
coordinate.row,
coordinate.col,
to_visits[best_index].row,
to_visits[best_index].col,
best_dist
);
results.push((best_index, best_dir, best_flag));
coordinate = to_visits[best_index];
direction = best_dir;
flag = best_flag;
visited[best_index] = true;
}
results
}
fn get_operation(
input: &Input,
mut coordinate: Coordinate,
mut dir: usize,
mut flag: usize,
unvisited: &[Coordinate],
tsp: &[(usize, usize, usize)],
) -> Operation {
let mut commands = vec![];
for &(i, next_dir, next_flag) in tsp.iter() {
let next_coordinate = unvisited[i];
let next_commands = get_command(
input,
coordinate,
dir,
flag,
next_coordinate,
next_dir,
next_flag,
);
for cmd in next_commands {
commands.push(cmd);
}
coordinate = next_coordinate;
dir = next_dir;
flag = next_flag;
}
compress_commands(&commands)
}
fn get_command(
input: &Input,
start_coordinate: Coordinate,
start_dir: usize,
start_flag: usize,
goal_coordinate: Coordinate,
goal_dir: usize,
goal_flag: usize,
) -> Vec<Command> {
let mut distances = mat![[[100000000; 3]; 4]; N; N];
let mut from = mat![[[(Coordinate::new(0, 0), 0, 0, Command::F); 3]; 4]; N; N];
let mut queue = VecDeque::new();
distances[start_coordinate.row][start_coordinate.col][start_dir][start_flag] = 0;
queue.push_back((
start_coordinate.row,
start_coordinate.col,
start_dir,
start_flag,
));
while let Some((row, col, dir, flag)) = queue.pop_front() {
let dist = distances[row][col][dir][flag];
let current = Coordinate::new(row, col);
// Forward
if let Some(next) = input.graph[row][col][dir] {
// 9 -> 10の時は考慮できないけどええやろ
if flag == 2 {
if chmin!(distances[next.row][next.col][dir][flag], dist) {
from[next.row][next.col][dir][flag] = (current, dir, flag, Command::F);
queue.push_front((next.row, next.col, dir, flag));
}
} else if flag < 2 {
if chmin!(distances[next.row][next.col][dir][flag + 1], dist + 1) {
from[next.row][next.col][dir][flag + 1] = (current, dir, flag, Command::F);
queue.push_back((next.row, next.col, dir, flag + 1));
}
}
}
// Left
let next_dir = dir.wrapping_sub(1) % 4;
if chmin!(distances[row][col][next_dir][0], dist + 1) {
from[row][col][next_dir][0] = (current, dir, flag, Command::L);
queue.push_back((row, col, next_dir, 0));
}
// Right
let next_dir = (dir + 1) % 4;
if chmin!(distances[row][col][next_dir][0], dist + 1) {
from[row][col][next_dir][0] = (current, dir, flag, Command::R);
queue.push_back((row, col, next_dir, 0));
}
}
let mut current = goal_coordinate;
let mut dir = goal_dir;
let mut flag = goal_flag;
let mut commands = Vec::with_capacity(distances[current.row][current.col][dir][flag]);
while start_coordinate != current || start_dir != dir || start_flag != flag {
let (c, d, f, com) = from[current.row][current.col][dir][flag];
commands.push(com);
current = c;
dir = d;
flag = f;
}
commands.reverse();
commands
}
fn compress_commands(commands: &[Command]) -> Operation {
// さすがに1個以上あるやろ
let mut last_command = commands[0];
let mut rep_count = 1;
let mut operations = vec![];
for &command in commands.iter().skip(1) {
if last_command != command {
operations.push(Operation::Single(rep_count, last_command));
last_command = command;
rep_count = 1;
} else {
rep_count += 1;
}
}
operations.push(Operation::Single(rep_count, last_command));
Operation::Multiple(1, operations)
}
fn calc_score(input: &Input, operation: &Operation) -> i32 {
let (coordinate, direction, cleaned) = generate_init_state(input);
let (_, _, cleaned_result, _) = operation.Apply(input, coordinate, direction, cleaned, 0);
let cleaned_count = cleaned_result
.iter()
.map(|v| v.iter().filter(|&&b| b).count())
.sum::<usize>();
if cleaned_count < N * N {
cleaned_count as i32
} else {
let len = operation.to_string().len() as f64;
let score = (N * N) as i32 + (1e8 / (100.0 + len)).round() as i32;
score
}
}
fn to_index(row: usize, col: usize, dir: usize, flag: usize) -> usize {
(((row * N + col) * 4 + dir) * 3) + flag
}
#[allow(dead_code)]
mod grid {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Coordinate {
pub row: usize,
pub col: usize,
}
impl Coordinate {
pub const fn new(row: usize, col: usize) -> Self {
Self { row, col }
}
pub fn in_map(&self, size: usize) -> bool {
self.row < size && self.col < size
}
pub const fn to_index(&self, size: usize) -> usize {
self.row * size + self.col
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct CoordinateDiff {
pub dr: usize,
pub dc: usize,
}
impl CoordinateDiff {
pub const fn new(dr: usize, dc: usize) -> Self {
Self { dr, dc }
}
pub const fn invert(&self) -> Self {
Self::new(0usize.wrapping_sub(self.dr), 0usize.wrapping_sub(self.dc))
}
}
impl std::ops::Add<CoordinateDiff> for Coordinate {
type Output = Coordinate;
fn add(self, rhs: CoordinateDiff) -> Self::Output {
Coordinate::new(self.row.wrapping_add(rhs.dr), self.col.wrapping_add(rhs.dc))
}
}
pub const ADJACENTS: [CoordinateDiff; 4] = [
CoordinateDiff::new(!0, 0),
CoordinateDiff::new(0, 1),
CoordinateDiff::new(1, 0),
CoordinateDiff::new(0, !0),
];
}
提出情報
コンパイルエラー
warning: variant `l` should have an upper camel case name
--> src/main.rs:98:5
|
98 | l,
| ^ help: convert the identifier to upper camel case: `L`
|
= note: `#[warn(non_camel_case_types)]` on by default
warning: variant `r` should have an upper camel case name
--> src/main.rs:99:5
|
99 | r,
| ^ help: convert the identifier to upper camel case: `R`
warning: unused variable: `cleaned`
--> src/main.rs:311:20
|
311 | let (_, _, cleaned, _) =
| ^^^^^^^ help: consider prefixing with an underscore: `_cleaned`
|
= note: `#[warn(unused_variables)]` on by default
warning: method `Apply` should have a snake case name
--> src/main.rs:121:8
|
121 | fn Apply(
| ^^^^^ help: convert the identifier to snake case: `apply`
|
= note: `#[warn(non_snake_case)]` on by default
ジャッジ結果
| セット名 |
test_ALL |
| 得点 / 配点 |
39346364 / 100000000 |
| 結果 |
|
| セット名 |
テストケース |
| 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 |
| ケース名 |
結果 |
実行時間 |
メモリ |
| test_0000.txt |
AC |
352 ms |
92840 KiB |
| test_0001.txt |
AC |
343 ms |
92808 KiB |
| test_0002.txt |
AC |
345 ms |
92800 KiB |
| test_0003.txt |
AC |
346 ms |
92856 KiB |
| test_0004.txt |
AC |
351 ms |
92880 KiB |
| test_0005.txt |
AC |
341 ms |
92864 KiB |
| test_0006.txt |
AC |
339 ms |
92860 KiB |
| test_0007.txt |
AC |
347 ms |
92892 KiB |
| test_0008.txt |
AC |
347 ms |
92860 KiB |
| test_0009.txt |
AC |
335 ms |
92816 KiB |
| test_0010.txt |
AC |
340 ms |
92860 KiB |
| test_0011.txt |
AC |
342 ms |
92840 KiB |
| test_0012.txt |
AC |
344 ms |
92868 KiB |
| test_0013.txt |
AC |
355 ms |
92860 KiB |
| test_0014.txt |
AC |
343 ms |
92948 KiB |
| test_0015.txt |
AC |
357 ms |
92852 KiB |
| test_0016.txt |
AC |
339 ms |
92856 KiB |
| test_0017.txt |
AC |
349 ms |
92912 KiB |
| test_0018.txt |
AC |
337 ms |
92792 KiB |
| test_0019.txt |
AC |
341 ms |
92828 KiB |
| test_0020.txt |
AC |
345 ms |
92816 KiB |
| test_0021.txt |
AC |
341 ms |
92824 KiB |
| test_0022.txt |
AC |
343 ms |
92880 KiB |
| test_0023.txt |
AC |
349 ms |
92812 KiB |
| test_0024.txt |
AC |
341 ms |
92868 KiB |
| test_0025.txt |
AC |
341 ms |
92860 KiB |
| test_0026.txt |
AC |
348 ms |
92876 KiB |
| test_0027.txt |
AC |
339 ms |
92864 KiB |
| test_0028.txt |
AC |
343 ms |
92752 KiB |
| test_0029.txt |
AC |
338 ms |
92808 KiB |
| test_0030.txt |
AC |
350 ms |
92672 KiB |
| test_0031.txt |
AC |
353 ms |
92904 KiB |
| test_0032.txt |
AC |
354 ms |
92892 KiB |
| test_0033.txt |
AC |
342 ms |
92948 KiB |
| test_0034.txt |
AC |
346 ms |
92912 KiB |
| test_0035.txt |
AC |
347 ms |
92908 KiB |
| test_0036.txt |
AC |
342 ms |
92800 KiB |
| test_0037.txt |
AC |
348 ms |
92932 KiB |
| test_0038.txt |
AC |
342 ms |
92940 KiB |
| test_0039.txt |
AC |
342 ms |
92848 KiB |
| test_0040.txt |
AC |
344 ms |
92924 KiB |
| test_0041.txt |
AC |
356 ms |
92904 KiB |
| test_0042.txt |
AC |
348 ms |
92916 KiB |
| test_0043.txt |
AC |
346 ms |
92828 KiB |
| test_0044.txt |
AC |
339 ms |
92908 KiB |
| test_0045.txt |
AC |
349 ms |
92940 KiB |
| test_0046.txt |
AC |
341 ms |
92864 KiB |
| test_0047.txt |
AC |
337 ms |
92912 KiB |
| test_0048.txt |
AC |
350 ms |
92788 KiB |
| test_0049.txt |
AC |
354 ms |
92832 KiB |
| test_0050.txt |
AC |
349 ms |
92804 KiB |
| test_0051.txt |
AC |
343 ms |
92812 KiB |
| test_0052.txt |
AC |
350 ms |
92824 KiB |
| test_0053.txt |
AC |
346 ms |
92884 KiB |
| test_0054.txt |
AC |
356 ms |
92796 KiB |
| test_0055.txt |
AC |
342 ms |
92912 KiB |
| test_0056.txt |
AC |
345 ms |
92836 KiB |
| test_0057.txt |
AC |
342 ms |
92868 KiB |
| test_0058.txt |
AC |
350 ms |
92812 KiB |
| test_0059.txt |
AC |
351 ms |
92956 KiB |
| test_0060.txt |
AC |
332 ms |
92876 KiB |
| test_0061.txt |
AC |
342 ms |
92824 KiB |
| test_0062.txt |
AC |
349 ms |
92924 KiB |
| test_0063.txt |
AC |
347 ms |
92956 KiB |
| test_0064.txt |
AC |
353 ms |
92844 KiB |
| test_0065.txt |
AC |
335 ms |
92888 KiB |
| test_0066.txt |
AC |
347 ms |
92844 KiB |
| test_0067.txt |
AC |
347 ms |
92732 KiB |
| test_0068.txt |
AC |
338 ms |
92948 KiB |
| test_0069.txt |
AC |
349 ms |
92832 KiB |
| test_0070.txt |
AC |
339 ms |
92932 KiB |
| test_0071.txt |
AC |
345 ms |
92804 KiB |
| test_0072.txt |
AC |
349 ms |
92792 KiB |
| test_0073.txt |
AC |
349 ms |
92812 KiB |
| test_0074.txt |
AC |
342 ms |
92860 KiB |
| test_0075.txt |
AC |
345 ms |
92716 KiB |
| test_0076.txt |
AC |
345 ms |
92620 KiB |
| test_0077.txt |
AC |
346 ms |
92904 KiB |
| test_0078.txt |
AC |
354 ms |
92820 KiB |
| test_0079.txt |
AC |
353 ms |
92924 KiB |
| test_0080.txt |
AC |
346 ms |
92868 KiB |
| test_0081.txt |
AC |
347 ms |
92796 KiB |
| test_0082.txt |
AC |
351 ms |
92780 KiB |
| test_0083.txt |
AC |
338 ms |
92820 KiB |
| test_0084.txt |
AC |
345 ms |
92748 KiB |
| test_0085.txt |
AC |
344 ms |
92868 KiB |
| test_0086.txt |
AC |
338 ms |
92884 KiB |
| test_0087.txt |
AC |
337 ms |
92844 KiB |
| test_0088.txt |
AC |
338 ms |
92948 KiB |
| test_0089.txt |
AC |
349 ms |
92948 KiB |
| test_0090.txt |
AC |
350 ms |
92840 KiB |
| test_0091.txt |
AC |
349 ms |
92952 KiB |
| test_0092.txt |
AC |
348 ms |
92944 KiB |
| test_0093.txt |
AC |
345 ms |
92900 KiB |
| test_0094.txt |
AC |
347 ms |
92952 KiB |
| test_0095.txt |
AC |
350 ms |
92856 KiB |
| test_0096.txt |
AC |
333 ms |
92932 KiB |
| test_0097.txt |
AC |
343 ms |
92864 KiB |
| test_0098.txt |
AC |
343 ms |
92836 KiB |
| test_0099.txt |
AC |
351 ms |
92836 KiB |