Submission #44540034
Source Code Expand
use proconio::{input, source::line::LineSource};
use std::{
io::{stdin, BufReader},
mem,
process::exit,
};
fn main() {
let stdin = stdin();
let mut source = LineSource::new(BufReader::new(stdin.lock()));
input! {
from &mut source,
grid_size: usize,
num_exit: usize,
stdev: i32,
exit_cells: [(usize, usize); num_exit]
};
let mut temps = vec![vec![-1; grid_size]; grid_size];
let mut tem = stdev;
// ふつうに埋めるパート
for i in 0..grid_size {
for j in 0..grid_size {
for x in exit_cells.iter() {
if (i, j) == *x {
temps[i][j] = tem;
tem += 2 * stdev;
}
}
}
}
// もし誤差が出るようであれば全部 0
if tem > 1000 {
for i in 0..grid_size {
for j in 0..grid_size {
temps[i][j] = 0;
}
}
}
// 線形補間
let mut transposed = false;
loop {
let mut changed = false;
for i in 0..grid_size {
let mut v = Vec::<(i32, usize)>::new();
for j in 0..grid_size {
if temps[i][j] == -1 {
continue;
}
v.push((temps[i][j], j));
}
if v.len() > 1 && v.len() < grid_size {
for x in 0..v.len() {
let diff = v[(x + 1) % v.len()].0 - v[x].0;
let nxtidx = v[(x + 1) % v.len()].1
+ if v[(x + 1) % v.len()].1 > v[x].1 {
0
} else {
grid_size
};
let difflen = nxtidx - v[x].1;
for j in v[x].1 + 1..nxtidx {
temps[i][j % grid_size] =
v[x].0 + diff * (j - v[x].1) as i32 / difflen as i32;
}
}
changed = true;
}
}
if !transposed && !changed {
break;
}
let mut nxttemps = vec![vec![0; grid_size]; grid_size];
for i in 0..grid_size {
for j in 0..grid_size {
nxttemps[j][i] = temps[i][j];
}
}
mem::swap(&mut temps, &mut nxttemps);
transposed = !transposed;
}
// output temps
for i in 0..grid_size {
for j in 0..grid_size {
print!("{} ", temps[i][j].min(1000).max(0));
}
println!("");
}
if tem > 1000 {
println!("-1 -1 -1");
for _ in 0..num_exit {
println!("0");
}
return;
}
// measure
let mut measure_res = vec![Vec::<i32>::new(); num_exit];
for turn in 0..6 * num_exit {
println!("{} {} {}", turn % num_exit, 0, 0);
input! {
from &mut source,
measure_result: i32
};
if measure_result == -1 {
exit(0);
}
measure_res[turn % num_exit].push(measure_result);
}
// output
println!("-1 -1 -1");
for i in 0..num_exit {
let mut ans = (0.0, 0);
for x in 0..num_exit {
let mut prob = 1.0;
let temp = temps[exit_cells[x].0][exit_cells[x].1];
for j in 0..measure_res[i].len() {
let diff = (measure_res[i][j] - temp as i32) as f64;
prob *= (-(diff * diff) / (2 * (stdev * stdev)) as f64).exp();
}
if prob > ans.0 {
ans = (prob, x);
}
}
eprintln!("{} {}", ans.0, ans.1);
println!("{}", ans.1);
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Exploring Another Space |
| User | a01sa01to |
| Language | Rust (1.42.0) |
| Score | 51679687 |
| Code Size | 3858 Byte |
| Status | AC |
| Exec Time | 22 ms |
| Memory | 4244 KiB |
Judge Result
| Set Name | test_ALL | ||
|---|---|---|---|
| Score / Max Score | 51679687 / 50000000000 | ||
| 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 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| test_0000.txt | AC | 15 ms | 3988 KiB |
| test_0001.txt | AC | 15 ms | 4052 KiB |
| test_0002.txt | AC | 11 ms | 4244 KiB |
| test_0003.txt | AC | 11 ms | 3916 KiB |
| test_0004.txt | AC | 13 ms | 4184 KiB |
| test_0005.txt | AC | 15 ms | 3996 KiB |
| test_0006.txt | AC | 11 ms | 3928 KiB |
| test_0007.txt | AC | 13 ms | 4000 KiB |
| test_0008.txt | AC | 12 ms | 4028 KiB |
| test_0009.txt | AC | 10 ms | 4072 KiB |
| test_0010.txt | AC | 11 ms | 4000 KiB |
| test_0011.txt | AC | 13 ms | 4236 KiB |
| test_0012.txt | AC | 20 ms | 3796 KiB |
| test_0013.txt | AC | 11 ms | 3976 KiB |
| test_0014.txt | AC | 11 ms | 4060 KiB |
| test_0015.txt | AC | 12 ms | 3924 KiB |
| test_0016.txt | AC | 14 ms | 4088 KiB |
| test_0017.txt | AC | 22 ms | 3924 KiB |
| test_0018.txt | AC | 22 ms | 3980 KiB |
| test_0019.txt | AC | 12 ms | 4064 KiB |
| test_0020.txt | AC | 13 ms | 3988 KiB |
| test_0021.txt | AC | 12 ms | 4180 KiB |
| test_0022.txt | AC | 14 ms | 4004 KiB |
| test_0023.txt | AC | 11 ms | 3928 KiB |
| test_0024.txt | AC | 11 ms | 3980 KiB |
| test_0025.txt | AC | 11 ms | 4060 KiB |
| test_0026.txt | AC | 11 ms | 4184 KiB |
| test_0027.txt | AC | 8 ms | 3916 KiB |
| test_0028.txt | AC | 15 ms | 3996 KiB |
| test_0029.txt | AC | 12 ms | 4240 KiB |
| test_0030.txt | AC | 13 ms | 3996 KiB |
| test_0031.txt | AC | 18 ms | 4024 KiB |
| test_0032.txt | AC | 10 ms | 3992 KiB |
| test_0033.txt | AC | 13 ms | 4000 KiB |
| test_0034.txt | AC | 10 ms | 4244 KiB |
| test_0035.txt | AC | 13 ms | 3988 KiB |
| test_0036.txt | AC | 10 ms | 3924 KiB |
| test_0037.txt | AC | 13 ms | 3924 KiB |
| test_0038.txt | AC | 11 ms | 3912 KiB |
| test_0039.txt | AC | 11 ms | 3992 KiB |
| test_0040.txt | AC | 16 ms | 3924 KiB |
| test_0041.txt | AC | 12 ms | 4020 KiB |
| test_0042.txt | AC | 10 ms | 4040 KiB |
| test_0043.txt | AC | 14 ms | 4052 KiB |
| test_0044.txt | AC | 12 ms | 4240 KiB |
| test_0045.txt | AC | 9 ms | 3984 KiB |
| test_0046.txt | AC | 13 ms | 4000 KiB |
| test_0047.txt | AC | 12 ms | 4036 KiB |
| test_0048.txt | AC | 10 ms | 3936 KiB |
| test_0049.txt | AC | 12 ms | 3932 KiB |