Submission #44547951
Source Code Expand
use proconio::{input, source::line::LineSource};
use std::{
io::{stdin, BufReader},
mem,
process::exit,
};
fn transpose(temps: &Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut nxttemps = vec![vec![0; temps.len()]; temps.len()];
for i in 0..temps.len() {
for j in 0..temps.len() {
nxttemps[j][i] = temps[i][j];
}
}
return nxttemps;
}
fn linear_completion(_temps: &Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut temps = _temps.clone();
let mut transposed = false;
loop {
let mut changed = false;
for i in 0.._temps.len() {
let mut v = Vec::<(i32, usize)>::new();
for j in 0.._temps.len() {
if temps[i][j] == -1 {
continue;
}
v.push((temps[i][j], j));
}
if v.len() > 1 && v.len() < _temps.len() {
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 {
_temps.len()
};
let difflen = nxtidx - v[x].1;
for j in v[x].1 + 1..nxtidx {
temps[i][j % _temps.len()] =
v[x].0 + diff * (j - v[x].1) as i32 / difflen as i32;
}
}
changed = true;
}
}
if !transposed && !changed {
break;
}
let mut nxttemps = transpose(&temps);
mem::swap(&mut temps, &mut nxttemps);
transposed = !transposed;
}
return temps;
}
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 exit_cells_ordered = exit_cells.clone();
exit_cells_ordered.sort_by(|a, b| {
((a.0 as i32 - grid_size as i32 / 2).abs() + (a.1 as i32 - grid_size as i32 / 2).abs()).cmp(
&((b.0 as i32 - grid_size as i32 / 2).abs()
+ (b.1 as i32 - grid_size as i32 / 2).abs()),
)
});
let mut temps = vec![vec![-1; grid_size]; grid_size];
let mut tem = stdev;
// ふつうに埋めるパート
for (i, j) in exit_cells_ordered.iter() {
temps[*i][*j] = tem;
tem += 2 * stdev;
}
// もし1000を超えるようであれば全部 0
if tem > 1000 {
for (i, j) in exit_cells_ordered.iter() {
// if temps[*i][*j] > 1000 {
temps[*i][*j] = 0;
// }
}
}
// 線形補間
let temps_yoko = linear_completion(&temps);
let temps_tate = transpose(&linear_completion(&transpose(&temps)));
for i in 0..grid_size {
for j in 0..grid_size {
temps[i][j] = (temps_yoko[i][j] + temps_tate[i][j]) / 2;
}
}
// 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 | 82405355 |
| Code Size | 4590 Byte |
| Status | AC |
| Exec Time | 31 ms |
| Memory | 4304 KiB |
Judge Result
| Set Name | test_ALL | ||
|---|---|---|---|
| Score / Max Score | 82405355 / 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 | 31 ms | 3968 KiB |
| test_0001.txt | AC | 12 ms | 4240 KiB |
| test_0002.txt | AC | 12 ms | 4008 KiB |
| test_0003.txt | AC | 11 ms | 4064 KiB |
| test_0004.txt | AC | 11 ms | 4032 KiB |
| test_0005.txt | AC | 17 ms | 4032 KiB |
| test_0006.txt | AC | 14 ms | 4052 KiB |
| test_0007.txt | AC | 14 ms | 4052 KiB |
| test_0008.txt | AC | 16 ms | 4300 KiB |
| test_0009.txt | AC | 13 ms | 4248 KiB |
| test_0010.txt | AC | 13 ms | 3988 KiB |
| test_0011.txt | AC | 13 ms | 4044 KiB |
| test_0012.txt | AC | 21 ms | 3748 KiB |
| test_0013.txt | AC | 11 ms | 4116 KiB |
| test_0014.txt | AC | 16 ms | 4068 KiB |
| test_0015.txt | AC | 12 ms | 4000 KiB |
| test_0016.txt | AC | 12 ms | 4136 KiB |
| test_0017.txt | AC | 18 ms | 4076 KiB |
| test_0018.txt | AC | 11 ms | 4300 KiB |
| test_0019.txt | AC | 15 ms | 4044 KiB |
| test_0020.txt | AC | 13 ms | 3984 KiB |
| test_0021.txt | AC | 12 ms | 3976 KiB |
| test_0022.txt | AC | 15 ms | 3996 KiB |
| test_0023.txt | AC | 13 ms | 4080 KiB |
| test_0024.txt | AC | 15 ms | 4300 KiB |
| test_0025.txt | AC | 11 ms | 4036 KiB |
| test_0026.txt | AC | 15 ms | 3996 KiB |
| test_0027.txt | AC | 12 ms | 3988 KiB |
| test_0028.txt | AC | 14 ms | 4032 KiB |
| test_0029.txt | AC | 14 ms | 4240 KiB |
| test_0030.txt | AC | 12 ms | 4116 KiB |
| test_0031.txt | AC | 10 ms | 4116 KiB |
| test_0032.txt | AC | 13 ms | 4036 KiB |
| test_0033.txt | AC | 12 ms | 3988 KiB |
| test_0034.txt | AC | 15 ms | 4128 KiB |
| test_0035.txt | AC | 13 ms | 4064 KiB |
| test_0036.txt | AC | 14 ms | 3996 KiB |
| test_0037.txt | AC | 12 ms | 4072 KiB |
| test_0038.txt | AC | 11 ms | 4064 KiB |
| test_0039.txt | AC | 9 ms | 4032 KiB |
| test_0040.txt | AC | 15 ms | 4304 KiB |
| test_0041.txt | AC | 13 ms | 4196 KiB |
| test_0042.txt | AC | 11 ms | 4052 KiB |
| test_0043.txt | AC | 14 ms | 4036 KiB |
| test_0044.txt | AC | 18 ms | 3992 KiB |
| test_0045.txt | AC | 15 ms | 4096 KiB |
| test_0046.txt | AC | 10 ms | 4000 KiB |
| test_0047.txt | AC | 17 ms | 3984 KiB |
| test_0048.txt | AC | 10 ms | 4092 KiB |
| test_0049.txt | AC | 12 ms | 4088 KiB |