AtCoder Grand Contest 006: A - Prefix and Suffix

,

http://agc006.contest.atcoder.jp/tasks/agc006_a

#!/usr/bin/env python3
import itertools
n = int(input())
s = input()
t = input()
for l in itertools.count(n):
    it = (s + 'a' * l)[: l - len(t)] + t
    if len(it) >= n and it.startswith(s) and it.endswith(t):
        break
print(len(it))

golf 鑑賞

%20さんのperl解: http://agc006.contest.atcoder.jp/submissions/958849

まず$|s| = |t| = N$なので$1$行目$N$は捨ててよい。 残りの$2$行の全体に対し、改行を中心としてs/(.*)\n\1/$1/として置換することで重複部分(で最大のもの)を消去できる。 末尾の改行を削ったものの長さが答え。 `dd``cat`で置き換えても動く。 正規表現のr optionはnon-destructive modifierらしい。