結果
| 問題 | No.3323 岩井星式ジャンケン |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-05 02:02:30 |
| 言語 | Rust (1.97.1 + proconio + num + itertools) |
| 結果 |
AC
|
| 実行時間 | 12 ms / 2,000 ms |
| + 995µs | |
| コード長 | 1,648 bytes |
| 記録 | |
| コンパイル時間 | 696 ms |
| コンパイル使用メモリ | 203,096 KB |
| 実行使用メモリ | 9,792 KB |
| 最終ジャッジ日時 | 2026-09-05 02:02:38 |
| 合計ジャッジ時間 | 3,289 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
use itertools::Itertools;
use proconio::{input, marker::Chars};
const HAND_KIND: [char; 3] = ['G', 'P', 'C'];
fn main() {
input! {
n: usize,
m: usize,
s: [Chars; n],
}
let mut ans = vec![];
let mut is_lose = vec![false; n];
for j in 0..m {
let mut kinds: i32 = 0;
for i in 0..n {
if is_lose[i] {
continue;
}
kinds |= 1 << HAND_KIND.iter().position(|c| *c == s[i][j]).unwrap()
}
let win_hand = match kinds.count_ones() {
0 => 0,
1 => {
let mut res = 0;
for i in 0..3 {
if 1 << i == kinds {
res = (i + 1) % 3;
}
}
res
}
2 => {
if kinds == (1 << 0) | (1 << 1) {
1
} else if kinds == (1 << 1) | (1 << 2) {
2
} else {
0
}
}
3 => {
println!("-1");
return;
}
_ => unreachable!(),
};
ans.push(HAND_KIND[win_hand]);
for i in 0..n {
if is_lose[i] {
continue;
}
let hand = HAND_KIND.iter().position(|c| *c == s[i][j]).unwrap();
if (hand + 1) % 3 == win_hand {
is_lose[i] = true;
}
}
}
if is_lose.iter().any(|&lose| !lose) {
println!("-1");
} else {
println!("{}", ans.iter().join(""));
}
}