Skip to content

Instantly share code, notes, and snippets.

@robert-king
Last active May 2, 2022 10:21
Show Gist options
  • Save robert-king/2f3695f3ebe365f33b8a26e0f325e92e to your computer and use it in GitHub Desktop.
Save robert-king/2f3695f3ebe365f33b8a26e0f325e92e to your computer and use it in GitHub Desktop.
Rusty Rob Codejam 2022 1B
// video here: https://www.youtube.com/c/RobertKing/videos
fn dist(x: u64, y: u64) -> u64 {
if x <= y {
return y - x;
}
x-y
}
fn min(x: u64, y: u64) -> u64 {
if x < y {
return x;
}
y
}
fn main() {
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 n: usize = sc.read();
let p: usize = sc.read();
let mut v = vec![];
for _ in 0..n {
let mut xs: Vec<u64> = sc.vec(p);
xs.sort_unstable();
v.push((xs[0], xs[p-1]));
}
v.reverse();
v.push((0, 0));
let mut dp = vec![[0, 0]; n+1];
for i in (0..n).rev() {
// + dist(v[i].0, v[i].1)
let ll = dist(v[i].0, v[i+1].0) + dp[i+1][0];
let rl = dist(v[i].0, v[i+1].1) + dp[i+1][1];
let lr = dist(v[i].1, v[i+1].0) + dp[i+1][0];
let rr = dist(v[i].1, v[i+1].1) + dp[i+1][1];
dp[i][1] = min(ll,rl) + dist(v[i].0, v[i].1);
dp[i][0] = min(lr, rr) + dist(v[i].0, v[i].1);
}
let ans = min(dp[0][0], dp[0][1]);
sc.write(
format!("Case #{}: {}", case_num, ans)
);
sc.write("\n");
}
}
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 usize0(&mut self) -> usize {
self.read::<usize>() - 1
}
pub fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
(0..n).map(|_| self.read()).collect()
}
pub fn chars(&mut self) -> Vec<char> {
self.read::<String>().chars().collect()
}
pub fn binary_vec(&mut self) -> Vec<u8> {
self.read::<String>()
.bytes()
.map(|b| b - b'0')
.collect()
}
}
// video here: https://www.youtube.com/c/RobertKing/videos
use std::collections::VecDeque;
fn main() {
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 n: usize = sc.read();
let v: Vec<usize> = sc.vec(n);
let mut q: VecDeque<usize> = VecDeque::from(v);
let mut ans = 0;
let mut mn = 0;
while q.len() > 1 {
let taken = if q.front() >= q.back() {
q.pop_back().unwrap()
} else {
q.pop_front().unwrap()
};
if taken >= mn {
ans += 1;
}
mn = mn.max(taken);
}
if q.pop_back().unwrap() >= mn {
ans += 1;
}
sc.write(
format!("Case #{}: {}", case_num, ans)
);
sc.write("\n");
}
}
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 usize0(&mut self) -> usize {
self.read::<usize>() - 1
}
pub fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
(0..n).map(|_| self.read()).collect()
}
pub fn chars(&mut self) -> Vec<char> {
self.read::<String>().chars().collect()
}
pub fn binary_vec(&mut self) -> Vec<u8> {
self.read::<String>()
.bytes()
.map(|b| b - b'0')
.collect()
}
}
@tanveer-ahmad74
Copy link

I think this is far from my mind i m python developer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment