My code compiles quickly on my old laptop using the same version of Rust as 
the competition environment, however, I had to renamed my cache variable to 
_cache to avoid a file locking error:

>> time cargo build --release
    Blocking waiting for file lock on package cache

However, after fixing this error by renaming to _cache, I resubmitted, 
however now I always get CTLE. I'm wondering if this is a locking issue due 
to GCJ trying to run cargo build twice at the same time. Or, is my code 
simply compiling too slowly? Here is my code for what it's worth:

fn main() {
let mut sz = [[0usize;100]; 100];
let mut _cache: [[Option<usize>;100]; 100] = [[None;100]; 100];
let mut multiset = [[[0usize;100];100]; 100];
let (r, w) = (std::io::stdin(), std::io::stdout());
let mut sc = IO::new(r.lock(), w.lock());
let t: usize = sc.read();

for case_num in 1..=t {
let (e, w): (usize, usize) = (sc.read(), sc.read());
for i in 0..e {
let weight_counts: Vec<usize> = sc.vec(w);
sz[i][i] = weight_counts.iter().sum::<usize>();
for k in i..e {
_cache[i][k] = None;
}
for j in 0..w {
multiset[i][i][j] = weight_counts[j];
}
}
for i in 0..e {
for j in i+1..e {
sz[i][j] = 0;
for k in 0..w {
multiset[i][j][k] = multiset[i][j-1][k].min(multiset[j][j][k]);
sz[i][j] += multiset[i][j][k];
assert!(sz[i][j-1] >= sz[i][j]);
}
}
}
let ans = 2*sz[0][e-1] + m(0, e-1, &sz, &mut _cache);
sc.write(
format!("Case #{}: {}", case_num, ans)
);
sc.write("\n");
}
}

fn m(l: usize, r: usize, sz: &[[usize;100]; 100], _cache: &mut 
[[Option<usize>;100]; 100]) -> usize {
if l == r {
return 0;
}
if let Some(cached) = _cache[l][r] {
return cached;
}
let mut ans = 1_000_000_000;
for x in l..r {
let left = m(l, x, sz, _cache) + 2*sz[l][x] - 2*sz[l][r];
let right = m(x+1, r, sz, _cache) + 2*sz[x+1][r] - 2*sz[l][r];
ans = ans.min(left+right);
}
_cache[l][r] = Some(ans);
ans
}

pub struct IO<R, W: std::io::Write>(R, std::io::BufWriter<W>);

impl<R: std::io::Read, W: std::io::Write> IO<R, W> {
pub fn new(r: R, w: W) -> IO<R, W> {
IO(r, std::io::BufWriter::new(w))
}
pub fn write<S: ToString>(&mut self, s: S) {
use std::io::Write;
self.1.write_all(s.to_string().as_bytes()).unwrap();
}
pub fn read<T: std::str::FromStr>(&mut self) -> T {
use std::io::Read;
let buf = self
.0
.by_ref()
.bytes()
.map(|b| b.unwrap())
.skip_while(|&b| b == b' ' || b == b'\n' || b == b'\r' || b == b'\t')
.take_while(|&b| b != b' ' && b != b'\n' && b != b'\r' && b != b'\t')
.collect::<Vec<_>>();
unsafe { std::str::from_utf8_unchecked(&buf) }
.parse()
.ok()
.expect("Parse error.")
}
pub fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
(0..n).map(|_| self.read()).collect()
}
}


-- 
-- You received this message because you are subscribed to the Google Groups 
Code Jam group. To post to this group, send email to 
google-code@googlegroups.com. To unsubscribe from this group, send email to 
google-code+unsubscr...@googlegroups.com. For more options, visit this group at 
https://groups.google.com/d/forum/google-code?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Google Code Jam" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-code+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-code/c3f834aa-f313-402c-8a60-20e193fda0d2n%40googlegroups.com.

Reply via email to