結果
| 問題 | No.3798 algo to goal |
| ユーザー |
urectanc
|
| 提出日時 | 2026-11-13 23:44:52 |
| 言語 | Rust (1.99.1 + proconio + num + itertools + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,382 bytes |
| 記録 | |
| コンパイル時間 | 13,726 ms |
| コンパイル使用メモリ | 190,708 KB |
| 実行使用メモリ | 23,552 KB |
| 最終ジャッジ日時 | 2026-11-13 23:45:23 |
| 合計ジャッジ時間 | 8,651 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 10 WA * 30 |
ソースコード
use itertools::Itertools;
use proconio::{fastout, input, marker::Chars};
#[fastout]
fn main() {
input! { t: usize }
for _ in 0..t {
let ans = solve();
println!("{}", if ans { "Yes" } else { "No" });
}
}
fn solve() -> bool {
input! {
s: Chars,
t: Chars,
}
let n = s.len();
let f = |s: &[char]| {
let even = s.iter().copied().step_by(2).collect_vec();
let odd = s.iter().copied().skip(1).step_by(2).collect_vec();
(even, odd)
};
let (mut se, mut so) = f(&s);
let (mut te, mut to) = f(&t);
se.sort_unstable();
so.sort_unstable();
te.sort_unstable();
to.sort_unstable();
if se != te || so != to {
return false;
}
{
let mut s = s.clone();
s.sort_unstable();
s.dedup();
if s.len() < n {
return true;
}
}
assert!(n <= 26);
let x = inv(&s);
let y = inv(&t);
x % 2 == y % 2
}
fn inv(a: &[char]) -> usize {
let n = a.len();
let mut res = 0;
for j in 0..n {
for i in 0..j {
if a[i] > a[j] {
res += 1;
}
}
}
res
}
#[allow(unused)]
fn experiment() {
use std::collections::BTreeSet;
fn inv(a: &[usize]) -> usize {
let n = a.len();
let mut res = 0;
for j in 0..n {
for i in 0..j {
if a[i] > a[j] {
res += 1;
}
}
}
res
}
let n = 4;
let mut seen = BTreeSet::new();
let mut init = (0..n).collect_vec();
init.extend_from_within(..);
let n = init.len();
seen.insert(init.clone());
let mut stack = vec![init.clone()];
while let Some(state) = stack.pop() {
println!("o {state:?} {}", inv(&state));
for i in 0..=n - 4 {
let mut nstate = state.clone();
nstate.swap(i, i + 2);
nstate.swap(i + 1, i + 3);
if seen.insert(nstate.clone()) {
stack.push(nstate);
}
}
}
for v in init.iter().copied().permutations(n) {
if (0..n).any(|i| v[i] % 2 != i % 2) || seen.contains(&v) {
continue;
}
eprintln!("x {v:?} {}", inv(&v));
}
}
// 偶奇は不変
// 転倒数の偶奇
// distinctでなければなんでもOK
urectanc