結果
| 問題 |
No.588 空白と回文
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-10-09 00:11:55 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,403 bytes |
| コンパイル時間 | 12,656 ms |
| コンパイル使用メモリ | 403,060 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-12 16:09:40 |
| 合計ジャッジ時間 | 13,681 ms |
|
ジャッジサーバーID (参考情報) |
judge / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
#![allow(non_snake_case)]
use std::cmp;
use std::io::{ self, prelude::* };
macro_rules! pick {
($tokens:expr) => {
$tokens.next().unwrap().parse().expect("parse error")
}
}
fn read() -> String {
let mut s = String::new();
io::stdin().read_to_string(&mut s).expect("i/o error");
s
}
fn f_odd(S: &[char]) -> u32 {
let mut res = 0;
for i in 0..S.len() {
let mut cur = 1;
for j in 1.. {
let l = i as i64 - j as i64;
let r = i as i64 + j as i64;
if l < 0 || r >= S.len() as i64 { break; }
if S[l as usize] == S[r as usize] {
cur += 2;
}
}
res = cmp::max(res, cur);
}
res
}
fn f_even(S: &[char]) -> u32 {
if S.len() < 2 { return 0; }
let mut res = 0;
for i in 1..S.len() {
let mut cur = 0;
for j in 0.. {
let l = i as i64 - j as i64 - 1;
let r = i as i64 + j as i64;
if l < 0 || r >= S.len() as i64 { break; }
if S[l as usize] == S[r as usize] {
cur += 2;
}
}
res = cmp::max(res, cur);
}
res
}
fn main() {
let s = read();
let mut tokens = s.split_whitespace();
let S: String = pick!(tokens);
let S: Vec<_> = S.chars().collect();
let ans = cmp::max(f_odd(&S), f_even(&S));
println!("{}", ans);
}