競プロ典型90問をRustで解いていこう(パリティ)5日目

2022-03-17

はじめに

激辛ペヤングを完食して、腹を下して尻が燃えて焼け落ちたようにもだえ苦しんでいました。 意地で食べきったもののその後に待つのは地獄のみ。一体何ために食べたのか。今となっては分からない。

ペヤング 獄激辛やきそばFinal

またの機会を設けて話そうと思いますが、市販の激辛を謳う商品の中では群を抜いて辛いです。 数本口に入れてみただけで、牛乳1リットル飲んでも消えない辛味が口の中に襲い掛かります。

どうにかしてこの辛さを伝えたいのですが良い表現が思いつかないです。 CoCo壱番屋の10辛の10倍辛いといえば伝わるでしょうか。

ただ、ギロチンという大阪にある激辛料理専門店で食べたチャーハンと違い、手が震えたり、汗が止まらくなったり、鼻水も垂れまくりということにはなりませんでした…。

本日の問題

競プロ典型90問をRustで解いていこう(準備)0日目

今日は上の記事から5問目である、この問題を解いていきます。 024 - Select +/- One(★2)を解いていこうと思います。

024 - Select +/- One(★2)

値を+1もしくは-1してAとBの数列を一致させることができるかどうかを確認する。

立てた方針

過去に解いた競プロ問題の応用で解けそうです。 これら2つの条件を満たすときにOK判定がでます。

  • K回の操作で求める値にたどり着けるかを判定する。①
  • Kと①の偶数奇数が一致する

Rustでの回答例

数列のB-Aの絶対値を求めて、方針に沿った判定を粛々とこなすだけです。

use proconio::input;

fn main() {
    input! {
        n: usize,
        k: i32,
        a: [i32;n],
        b: [i32;n],
    }

    let mut diff = 0;

    for i in 0..n {
        diff += (b[i] - a[i]).abs();
    }
    let mut ans = true;
    if diff > k {
        ans = false
    }
    if diff % 2 != k % 2 {
        ans = false
    }
    println!("{}", if ans { "Yes" } else { "No" })
}

まとめ

最近うっすいうっすい記事を書いてる気がしますが、まぁいいでしょう。