競プロ弱者の解答

競プロ弱者の成長記録

ABC143:水色競プロerのムーブ備忘録

本当に久々のコンテスト中のムーブ備忘録です。

Djangoのwebアプリ作りも楽しいですが、競プロはもっと楽しいですね。

レートが上がればですけれど。

 

今回はABC143のムーブ記録です。

〇配点          A:100 B:200 C:300 D:400 E:500 F:600

〇制限時間  100分

 配点も時間もいつものABCですね。

〇コンテスト開始時のsyunsukeのレート 1246

〇今回の方針 

 基本前から解く。

 ただし、はまったら順位表を確認して、次の問題を通す人が多ければ、次の問題を先に解く。

 

コンテスト開始!

A:問題文表示しろ!問題文表示しろ!問題文表示しろ!

    01:49 AC

B:for ループ。ただし、重複しないように

    d=map(list(int,input())

    ans=0

  for i in range(N-1):

        for j in range(i+1,N):

                ans+=d[i]*d[j]

    print(ans)

    04:18 AC

C:前のスライムと種類がかわる箇所の数を数える。

 N=int(input())

 S=list(input())

 Color=""

 ans=0

 for i in range(N):

  if N[i]!=Color:

   ans+=1

   Color=N[i]

 print(ans)

 08:10 AC ここまで順調

D:小さい順にソートする。

 作る三角形の辺を小さいほうからA,B,Cとする。

 A,Bをforループで回す。

 bisectで、B<CかつA+B>Cを満たすCを探す。

 書けば単純なんですが、実装に苦戦。

 38:00 AC

  この時点で順位は1200位を超えて、レートは1200割れ。

  Eを解けなければレートダウン確定・・

E:とりあえずCがL以下なら、距離1としてワーシャルフロイド①。

 テストケースを試したら・・

 ダメです。

 町1⇒町2⇒町3 を町2で給油せずに行けるケースがありますね。

 前処理として今度は辺の距離をCとしてワーシャルフロイド②。

 ②で距離がL以下となった辺は1として、①のワーシャルフロイドを実行

 pypyで提出・・TLE この時点で 66:55

 ここで3択

 1.pypyの高速化

    何故か300^3を2回は無理と判断。

    (せめてTLEの内訳を見ていれば・・)

 2.C++で勝負

    ワーシャルフロイドくらいなら書けるか?

 3.scipyのライブラリを使用

    scipyのワーシャルフロイドはC++で書いてあったはず。

    ただ、使ったことないですけど。

 私は3を選択しました。

 ワーシャルフロイドがscipyに入っているのは知っていますが、使い方は知りません。ググってググって実装してRE出しながらもギリギリセーフ

 97:06 AC  3ペナ

F:残り3分を切っていたので、開くことなくギブアップ

 

結局A,B,C,D,E 5完 97:03 +3ペナ

463位で パフォ1649 レートは+47 で1293

レートが上がってよろこんでいたのですが、あとでわかりました。

EのTLEしたpypyで、入力を高速化するための、

 import sys

 input=sys.stdin.readline

をしていませんでした。

TLEの内訳は、50のケース中2つがTLE

これを確認いれば、高速化の工夫に目が行き、入力の高速化忘れに気づけたでしょう。

これを怠ったために、30分+2ペナ分のロスが生じました。

もっと稼げていたレートを無駄にしてしまいました。

 

今回の反省点:

 TLEしても、あと少しでACできそうなのか、全くダメなのかは確認する!