結果
| 問題 |
No.561 東京と京都
|
| コンテスト | |
| ユーザー |
ngtkana
|
| 提出日時 | 2023-04-06 00:44:29 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| コード長 | 2,069 bytes |
| コンパイル時間 | 12,864 ms |
| コンパイル使用メモリ | 377,928 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-02 03:35:33 |
| 合計ジャッジ時間 | 14,003 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 17 |
ソースコード
use std::{
convert::TryFrom,
io::{stdin, BufRead},
};
use cmpmore::CmpMore;
fn main() {
let stdin = stdin();
let mut stdin = stdin.lock().lines().map(Result::unwrap);
let [n, d] = <[_; 2]>::try_from(
stdin
.next()
.unwrap()
.split_whitespace()
.map(|x| x.parse::<usize>().unwrap())
.collect::<Vec<_>>()
.as_slice(),
)
.unwrap();
let d = d as i64;
let mut dp = [0, -d];
for _ in 0..n {
let w = <[_; 2]>::try_from(
stdin
.next()
.unwrap()
.split_whitespace()
.map(|x| x.parse::<i64>().unwrap())
.collect::<Vec<_>>()
.as_slice(),
)
.unwrap();
let mut swp = [0; 2];
for i in 0..2 {
for j in 0..2 {
swp[j].change_max(dp[i] + w[j] - (i != j) as i64 * d);
}
}
dp = swp;
}
let ans = *dp.iter().max().unwrap();
println!("{}", ans);
}
// cmpmore {{{
#[allow(dead_code)]
mod cmpmore {
pub fn change_min<T: PartialOrd>(lhs: &mut T, rhs: T) {
if *lhs > rhs {
*lhs = rhs;
}
}
pub fn change_max<T: PartialOrd>(lhs: &mut T, rhs: T) {
if *lhs < rhs {
*lhs = rhs;
}
}
#[macro_export]
macro_rules! change_min {
($lhs:expr, $rhs:expr) => {
let rhs = $rhs;
let lhs = $lhs;
$crate::cmpmore::change_min(lhs, rhs);
};
}
#[macro_export]
macro_rules! change_max {
($lhs:expr, $rhs:expr) => {
let rhs = $rhs;
let lhs = $lhs;
$crate::cmpmore::change_max(lhs, rhs);
};
}
pub trait CmpMore: PartialOrd + Sized {
fn change_min(&mut self, rhs: Self) {
change_min(self, rhs)
}
fn change_max(&mut self, rhs: Self) {
change_max(self, rhs)
}
}
impl<T: PartialOrd + Sized> CmpMore for T {}
}
// }}}
ngtkana