Submission #18834984


Source Code Expand

use std::cmp::min;

fn main() {
    let (r, w) = (std::io::stdin(), std::io::stdout());
    let mut sc = IO::new(r.lock(), w.lock());

    let a = sc.chars();
    let b = sc.chars();
    let mut da = vec![];
    let mut db = vec![];
    let n = a.len();
    for i in 0..n {
        if a[i] != b[i] {
            da.push(a[i]);
            db.push(b[i]);
        }
    }

    if da.len() > 6 {
        println!("NO");
        return;
    }

    if let Some(ans) = min_swaps(&mut da, &mut db, 0) {
        if ans == 1 || ans == 3 {
            println!("YES");
            return;
        }

        let mut a = a.clone();
        a.sort();
        a.dedup();
        if a.len() < n {
            println!("YES");
        } else {
            println!("NO");
        }
    } else {
        println!("NO");
    }
}

fn min_swaps(da: &mut [char], db: &[char], depth: usize) -> Option<usize> {
    if da == db {
        return Some(depth);
    }
    if depth == 3 {
        return None;
    }
    let n = da.len();
    let mut result = 5;
    for i in 0..n {
        for j in 0..i {
            da.swap(i, j);

            if let Some(d) = min_swaps(da, db, depth + 1) {
                result = min(result, d);
            }

            da.swap(i, j);
        }
    }

    if result > 3 {
        None
    } else {
        Some(result)
    }
}

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) -> Self {
        Self(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()
    }
    pub fn chars(&mut self) -> Vec<char> {
        self.read::<String>().chars().collect()
    }
}

Submission Info

Submission Time
Task C - 仲良し文字列
User kenkoooo
Language Rust (1.42.0)
Score 100
Code Size 2544 Byte
Status AC
Exec Time 3 ms
Memory 2208 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 86
Set Name Test Cases
All manual_01.txt, manual_02.txt, manual_03.txt, manual_04.txt, manual_05.txt, manual_06.txt, 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, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, sample_06.txt
Case Name Status Exec Time Memory
manual_01.txt AC 1 ms 1952 KiB
manual_02.txt AC 1 ms 2100 KiB
manual_03.txt AC 1 ms 2068 KiB
manual_04.txt AC 1 ms 2060 KiB
manual_05.txt AC 1 ms 2196 KiB
manual_06.txt AC 2 ms 2088 KiB
sample_01.txt AC 2 ms 1920 KiB
sample_02.txt AC 1 ms 2056 KiB
sample_03.txt AC 1 ms 2040 KiB
sample_04.txt AC 2 ms 1988 KiB
sample_05.txt AC 1 ms 2072 KiB
sample_06.txt AC 1 ms 2052 KiB
test_01.txt AC 1 ms 2052 KiB
test_02.txt AC 2 ms 2028 KiB
test_03.txt AC 2 ms 2088 KiB
test_04.txt AC 2 ms 2140 KiB
test_05.txt AC 1 ms 2072 KiB
test_06.txt AC 1 ms 2100 KiB
test_07.txt AC 1 ms 2080 KiB
test_08.txt AC 1 ms 2004 KiB
test_09.txt AC 1 ms 2076 KiB
test_10.txt AC 2 ms 2092 KiB
test_11.txt AC 3 ms 2144 KiB
test_12.txt AC 1 ms 2076 KiB
test_13.txt AC 1 ms 2160 KiB
test_14.txt AC 1 ms 2044 KiB
test_15.txt AC 1 ms 2028 KiB
test_16.txt AC 1 ms 2060 KiB
test_17.txt AC 2 ms 2152 KiB
test_18.txt AC 2 ms 2128 KiB
test_19.txt AC 1 ms 2056 KiB
test_20.txt AC 2 ms 2208 KiB
test_21.txt AC 1 ms 2036 KiB
test_22.txt AC 2 ms 2144 KiB
test_23.txt AC 1 ms 2148 KiB
test_24.txt AC 2 ms 1980 KiB
test_25.txt AC 2 ms 2128 KiB
test_26.txt AC 2 ms 2108 KiB
test_27.txt AC 2 ms 2068 KiB
test_28.txt AC 1 ms 2136 KiB
test_29.txt AC 1 ms 2144 KiB
test_30.txt AC 1 ms 2048 KiB
test_31.txt AC 2 ms 1944 KiB
test_32.txt AC 2 ms 2080 KiB
test_33.txt AC 3 ms 2064 KiB
test_34.txt AC 2 ms 2064 KiB
test_35.txt AC 1 ms 2080 KiB
test_36.txt AC 2 ms 2060 KiB
test_37.txt AC 1 ms 2092 KiB
test_38.txt AC 1 ms 2080 KiB
test_39.txt AC 2 ms 2052 KiB
test_40.txt AC 1 ms 1980 KiB
test_41.txt AC 2 ms 2116 KiB
test_42.txt AC 2 ms 2080 KiB
test_43.txt AC 2 ms 1956 KiB
test_44.txt AC 1 ms 1956 KiB
test_45.txt AC 1 ms 2024 KiB
test_46.txt AC 2 ms 2088 KiB
test_47.txt AC 1 ms 2116 KiB
test_48.txt AC 2 ms 2080 KiB
test_49.txt AC 1 ms 2080 KiB
test_50.txt AC 1 ms 2200 KiB
test_51.txt AC 1 ms 1980 KiB
test_52.txt AC 2 ms 2076 KiB
test_53.txt AC 3 ms 2068 KiB
test_54.txt AC 1 ms 1940 KiB
test_55.txt AC 2 ms 2068 KiB
test_56.txt AC 1 ms 2060 KiB
test_57.txt AC 1 ms 2100 KiB
test_58.txt AC 3 ms 2048 KiB
test_59.txt AC 1 ms 2096 KiB
test_60.txt AC 1 ms 2016 KiB
test_62.txt AC 2 ms 1944 KiB
test_63.txt AC 1 ms 2052 KiB
test_64.txt AC 2 ms 2064 KiB
test_65.txt AC 1 ms 2204 KiB
test_66.txt AC 1 ms 2044 KiB
test_67.txt AC 1 ms 2116 KiB
test_68.txt AC 1 ms 2100 KiB
test_69.txt AC 1 ms 2100 KiB