Submission #61255442


Source Code Expand

#![allow(dead_code)]

use proconio::{input, marker::Chars};

trait Bound<T> {
    fn lower_bound(&self, x: &T) -> usize;
    fn upper_bound(&self, x: &T) -> usize;
}

impl<T: PartialOrd> Bound<T> for [T] {
    fn lower_bound(&self, x: &T) -> usize {
        let (mut low, mut high) = (0, self.len());
        while low + 1 < high {
            let mid = (low + high) / 2;
            if self[mid] < *x {
                low = mid;
            } else {
                high = mid;
            }
        }
        if self[low] < *x {
            low + 1
        } else {
            low
        }
    }

    fn upper_bound(&self, x: &T) -> usize {
        let (mut low, mut high) = (0, self.len());
        while low + 1 < high {
            let mid = (low + high) / 2;
            if self[mid] <= *x {
                low = mid;
            } else {
                high = mid;
            }
        }
        if self[low] <= *x {
            low + 1
        } else {
            low
        }
    }
}

fn levenshtein_distance(word1: &str, word2: &str) -> usize {
    let w1 = word1.chars().collect::<Vec<_>>();
    let w2 = word2.chars().collect::<Vec<_>>();

    let word1_length = w1.len() + 1;
    let word2_length = w2.len() + 1;

    let mut matrix = vec![vec![0; word1_length]; word2_length];

    for i in 1..word1_length {
        matrix[0][i] = i;
    }
    for j in 1..word2_length {
        matrix[j][0] = j;
    }

    for j in 1..word2_length {
        for i in 1..word1_length {
            let x: usize = if w1[i - 1] == w2[j - 1] {
                matrix[j - 1][i - 1]
            } else {
                1 + std::cmp::min(
                    std::cmp::min(matrix[j][i - 1], matrix[j - 1][i]),
                    matrix[j - 1][i - 1],
                )
            };
            matrix[j][i] = x;
        }
    }
    matrix[word2_length - 1][word1_length - 1]
}

fn main() {
    input! {k:usize,s:Chars,t:Chars}
    if s.len() == t.len() {
        let mut diffs = 0;
        for (si, ti) in s.iter().zip(t.iter()) {
            if si != ti {
                diffs += 1;
            }
        }

        if diffs <= k {
            println!("Yes");
        } else {
            println!("No")
        }
    } else {
        let mut sidx = 0;
        let mut tidx = 0;
        let s_is_longer = s.len() > t.len();

        let mut diffs = 0;
        while s.len() > sidx && t.len() > tidx {
            if s[sidx] != t[tidx] {
                diffs += 1;
                if s_is_longer {
                    sidx += 1;
                } else {
                    tidx += 1
                }
            } else {
                sidx += 1;
                tidx += 1;
            }
        }

        let slen = s.len();
        let tlen = t.len();
        if sidx != slen || tidx != tlen {
            diffs += (slen - sidx).max(tlen - tidx);
        }

        if diffs <= k {
            println!("Yes")
        } else {
            println!("No")
        }
    }
}

Submission Info

Submission Time
Task C - Operate 1
User tsu7magu6
Language Rust (rustc 1.70.0)
Score 350
Code Size 3111 Byte
Status AC
Exec Time 7 ms
Memory 6756 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 350 / 350
Status
AC × 6
AC × 32
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 1936 KiB
sample_02.txt AC 1 ms 2064 KiB
sample_03.txt AC 1 ms 1944 KiB
sample_04.txt AC 1 ms 1944 KiB
sample_05.txt AC 1 ms 1972 KiB
sample_06.txt AC 1 ms 1792 KiB
test_01.txt AC 1 ms 2004 KiB
test_02.txt AC 1 ms 1996 KiB
test_03.txt AC 1 ms 2004 KiB
test_04.txt AC 1 ms 2088 KiB
test_05.txt AC 1 ms 1948 KiB
test_06.txt AC 4 ms 6548 KiB
test_07.txt AC 5 ms 6692 KiB
test_08.txt AC 7 ms 6660 KiB
test_09.txt AC 6 ms 6656 KiB
test_10.txt AC 6 ms 6528 KiB
test_11.txt AC 3 ms 4292 KiB
test_12.txt AC 2 ms 4204 KiB
test_13.txt AC 2 ms 2712 KiB
test_14.txt AC 2 ms 2684 KiB
test_15.txt AC 5 ms 6704 KiB
test_16.txt AC 6 ms 6684 KiB
test_17.txt AC 6 ms 6748 KiB
test_18.txt AC 5 ms 6756 KiB
test_19.txt AC 6 ms 6756 KiB
test_20.txt AC 7 ms 6580 KiB
test_21.txt AC 5 ms 6672 KiB
test_22.txt AC 6 ms 6684 KiB
test_23.txt AC 6 ms 6652 KiB
test_24.txt AC 6 ms 6588 KiB
test_25.txt AC 5 ms 6704 KiB
test_26.txt AC 6 ms 6724 KiB