0.はじめに
下降の一途をたどるレートですが、まぁ実力的に
こんなもんかと思い、心を入れ替えてC問題までを
確実に解くように進めていこうと思いました。
今回は、C問題までしか結局解けませんでしたが
レートは+6と若干持ち直しました。
1.A - Piling Up
Nを1ずつ増やしていき、100、200,300のいずれかをはじめに超えたタイミングが
答えとなります。
100,200,300を格納したリストを作り、先頭からNと比較し
Nがそれぞれの数以下の時、その和人の差分を出力して終了。としました。
https://atcoder.jp/contests/abc363/submissions/55769699
2.B - Japanese Cursed Doll
呪いの日本人形がモチーフの問題・・・?
の割にはあっさりと問題は語られていました。
それぞれの人が、後何ミリ髪が伸びれば
Tに達するか(あるいはすでに足しているか)を
別リストに持ち、昇順ソート後
そのリストの先頭からP番目の値を出力して終了としました。
解説を読んだら、単純にリストをソートして、P番目の人が
何ミリ伸ばせばいいかを計算するだけでよい事を理解しました・・・。
https://atcoder.jp/contests/abc363/submissions/55778475
3.C - Avoid K Palindrome 2
制限を見てとりあえず素直な実装でも時間足りるかもなーと実装
【実装1】
・Sを一文字ずつリストとしてリストSに読みこみ
・itertools.permutationsでSの全順序組み合わせをリストpairに格納
・セットリストLにpairの各組み合わせを格納(重複は削除)
・Lの各組み合わせをK文字ずつチェックし、回文になっている個所が無かったら
変数ansに1を加算
上記実装で、10文字の入力例3も時間内に解けたので、とりあえず提出。
→TLE2個と、ギリギリNG
パターンとして、S内の文字がすべて異なる場合が一番時間がかかる&
その場合は、絶対回文にならないので、実装1の前に、
・リストSの文字がすべて異なったら10文字の全組み合わせパターン数である
3628800を出力
という小ネタを仕込んでみたところ
見事ACでした。
我ながら小ずるい感じではありますが、C++だったら間に合うとゆっくり解説にもあったので
一つのテクニックとして良しとします。
https://atcoder.jp/contests/abc363/submissions/55796690
以上