SlideShare a Scribd company logo
1 of 12
Download to read offline
立命合宿立命合宿 2017 Day32017 Day3
AA問題「アルファベットブロック」問題「アルファベットブロック」
原案 : 杉江
問題文 : 杉江
テスター : 杉江、鈴木、井上、田中
解説 : 杉江
問題概要問題概要
●
英小文字のみからなる文字列 S が与えられる
●
1 ≦ |S| ≦ 103
●
S に対して以下の操作を何度か行って、文字を
並び替えたら回文ができあがるようにしたい
✔
ある 1 文字を S に追加
✔
S 中のある 1 文字を削除
✔
S 中のある 1 文字を別の文字に置き換える
●
回文にするための最小操作回数を求めよ
サンプルサンプル
例: “hcpc”
“hcpc”
“hcpch”
“cpc”
“cppc”
'h' を追加
'h' を削除
'h' を 'p' に変更
●
コストはすべて 1
考察考察 1:1: 回文の性質回文の性質
●
回文とは、右から読んでも左から読んでも同一
の文字列が得られる文のことである
●
S の長さを N とおき、文字列の前半 (N/2) 文字
からなる部分文字列を T 、T を左右反転させた
文字列を T' とする
●
S → T + (真ん中の文字) + T' が成り立つ
T T'
T T'
(N が奇数)
(N が偶数)
考察考察 2:2: 回文の性質回文の性質
●
T' は T を左右反転させたものなので、登場する
文字の種類とその個数は T と等しい
●
つまり T + T' では、全てのアルファベットが偶
数個ずつ存在する
T T'
T T'
(N が奇数)
(N が偶数)
考察考察 3:3: 回文の性質回文の性質
●
N が奇数のとき
●
1 種類だけが奇数個、他の種類のアルファベットが偶数個
ずつ存在すれば回文になる
●
N が偶数のとき
●
全てのアルファベットが偶数個ずつ存在すれば回文になる
T T'
T T'
(N が奇数)
(N が偶数)
考察考察 4:4: 解法解法
●
最初から偶数個あるアルファベットに関しては、
それ以上操作の必要がない
●
奇数個あるアルファベットを偶数個にするための
最適な操作はなにか?
●
今回の場合、「S 中のある 1 文字を別の文字に
置き換える」操作があるのでそれを使おう
考察考察 5:5: 解法解法
●
奇数個ある文字を、別の奇数個ある文字に置き換
えるのが最適
● 文字 C1
が (2p+1) 個、文字 C2
が (2q+1) 個あっ
たとして、C1
を C2
に置き換える
✔ C1
は (2p+1) - 1 = 2p 個 (偶数)
✔ C2
は (2q+1) + 1 = 2(q+1) 個 (偶数)
●
一度の操作で 2 種類のアルファベットが偶数に
なる!
解法まとめ解法まとめ
●
奇数個ある文字の種類を数える (M とおく)
●
答えは、M / 2 (切り捨て) になる
●
(追加や削除の操作は実は使いません)
ちなみにちなみに
●
もし「置き換えの操作」がない場合は、
max(0, M - 1) が答えになります
●
先ほどと同様に考えればこれが導けます
(各自やってみましょう)
TesterTester 解解
●
杉江 : 241 bytes, 10 lines (C++)
●
鈴木 : 293 bytes, 15 lines (C++)
●
井上 : 237 bytes, 16 lines (C++)
●
田中 : 422 bytes, 13 lines (Java)
●
田中 : 125 bytes, 12 lines (Python3)
統計統計
●
Accept / Submission
●
58.54 % (24/41)
●
First Acceptance
●
On-site : Gachofriends (11 min)
●
On-line : satanic0258 (4 min)

More Related Content

Viewers also liked

(ブログ用)Codeforces #400 D. The Door Problem
(ブログ用)Codeforces #400 D. The Door Problem(ブログ用)Codeforces #400 D. The Door Problem
(ブログ用)Codeforces #400 D. The Door Problemsatanic
 
(ブログ用)累積和をmapに入れて区間の和をカウントする
(ブログ用)累積和をmapに入れて区間の和をカウントする(ブログ用)累積和をmapに入れて区間の和をカウントする
(ブログ用)累積和をmapに入れて区間の和をカウントするsatanic
 

Viewers also liked (20)

G pub
G pubG pub
G pub
 
RUPC2017:全体の講評
RUPC2017:全体の講評RUPC2017:全体の講評
RUPC2017:全体の講評
 
RUPC2017:G解説
RUPC2017:G解説RUPC2017:G解説
RUPC2017:G解説
 
RUPC2017:I解説
RUPC2017:I解説RUPC2017:I解説
RUPC2017:I解説
 
RUPC2017:Bの解説
RUPC2017:Bの解説RUPC2017:Bの解説
RUPC2017:Bの解説
 
RUPC2017:Hの解説
RUPC2017:Hの解説RUPC2017:Hの解説
RUPC2017:Hの解説
 
RUPC2017:J解説
RUPC2017:J解説RUPC2017:J解説
RUPC2017:J解説
 
RUPC2017:L解説
RUPC2017:L解説RUPC2017:L解説
RUPC2017:L解説
 
立命合宿2016Day3:A問題
立命合宿2016Day3:A問題立命合宿2016Day3:A問題
立命合宿2016Day3:A問題
 
C : 解説
C : 解説C : 解説
C : 解説
 
(ブログ用)Codeforces #400 D. The Door Problem
(ブログ用)Codeforces #400 D. The Door Problem(ブログ用)Codeforces #400 D. The Door Problem
(ブログ用)Codeforces #400 D. The Door Problem
 
(ブログ用)累積和をmapに入れて区間の和をカウントする
(ブログ用)累積和をmapに入れて区間の和をカウントする(ブログ用)累積和をmapに入れて区間の和をカウントする
(ブログ用)累積和をmapに入れて区間の和をカウントする
 
ACPC2016Day3:D問題
ACPC2016Day3:D問題ACPC2016Day3:D問題
ACPC2016Day3:D問題
 
ACPC2016Day3:F問題
ACPC2016Day3:F問題ACPC2016Day3:F問題
ACPC2016Day3:F問題
 
ACPC2016Day3:G問題
ACPC2016Day3:G問題ACPC2016Day3:G問題
ACPC2016Day3:G問題
 
ACPC2016Day3:C問題
ACPC2016Day3:C問題ACPC2016Day3:C問題
ACPC2016Day3:C問題
 
全探索
全探索全探索
全探索
 
RUPC2017:Dの解説
RUPC2017:Dの解説RUPC2017:Dの解説
RUPC2017:Dの解説
 
RUPC2017:Cの解説
RUPC2017:Cの解説RUPC2017:Cの解説
RUPC2017:Cの解説
 
RUPC2017:E解説
RUPC2017:E解説RUPC2017:E解説
RUPC2017:E解説
 

More from HCPC: 北海道大学競技プログラミングサークル

More from HCPC: 北海道大学競技プログラミングサークル (20)

写像 12 相
写像 12 相写像 12 相
写像 12 相
 
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しいACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
 
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
 
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 

A pub