ABC130(4完)
ハロートナミです……
ABC130に出て13ペナで4完しました。13ペナ。13ペナです
日本語に苦戦しすぎています。
以下ネタバレがあります
A
考え
最近のABCのA極端に簡単すぎませんか?
書いたソース
X,A = map(int, input().split()) if X < A: print(0) else: print(10)
B
考え
問題文が難しい。例を見るとすぐ理解できます。
1回目のバウンドが必ずあることに注意します。
書いたソース
N,X = map(int, input().split()) L = [int(x) for x in input().split()] now = 0 result = 1 for l in L: now += l if now <= X: result += 1 print(result)
C
考え
問題文を一部抜粋します。
はい。
私は脳みそがダメなので2つの長方形に分割すると勝手に考えてWAを8回出しました。
なんとこの問題、2つの長方形に分割するソースを提出した際通らないテストケースが1つしかないんですよ。
なので、なんかエッジケースに気付けてないのか……?エッジケースって何?みたいになって無限にやってしまいました。ほんまによお
2つに分割するだけなら考える事はほとんどないです。
常に半分に分割する事ができ、x,yが中心である時のみ複数ケースがあります。
書いたソース
W, H, x, y = map(int, input().split()) if x == W/2 and y == H/2: print((W*H)/2, 1) else: print((W*H)/2, 0)
やだもー
D
考え
ABCのDってこういうやつだよね!という感じの問題。
まずaのsumと後ろからの累積和を取ります。
そしたら各aに対してそのaから何ケース考えれるかを後ろからの累積和に対する2分探索で計算し
処理が終わったらそのaをsumから引きます。
日本語にするのが難しいんですがソースだと多少わかりやすいかもしれない
書いたソース
import bisect N,K = map(int, input().split()) alist = [int(x) for x in input().split()] asum = sum(alist) reba = [0]*N x = 0 gyaku = alist[::-1] for i, a in enumerate(gyaku): x += a reba[i] = x result = 0 for a in alist: if asum < K: break result += bisect.bisect_right(reba, asum-K)+1 asum -= a print(result)
累積和の取り方が下手すぎる
EとF
EがDPなことはわかり、制約が10^3だったのでなんかこう、相互に頑張るんだなという気持ちになりました。
ソース化すら出来ていません。
結果
Dは自分にはやや難しい問題だと感じるためWAが出てもよしとする。2分探索無しでTLEしたのは気をつけるべきでした。
BのWAはケアレスミスなので今後は気をつける。
C、日本語の勉強をする。
一生水色になれない……
いやー本当にCの誤読が辛かった。Cで意味不明なハマり方しなければあと500位は順位高かった気がする。
昨今のABCはDまで解く人がめちゃんこ多くて、Dまでは早解き勝負、Eは解けたら凄いね、みたいな感じになっている印象です。
早解き勝負はプレッシャーがきついし普通に勝ち目も薄く感じるので、Eまで解ける方向に精進をシフトする必要があるかもしれません。
具体的にはDPです。DPを思い通りにかけるようにならないといけない。DPをやりましょう
おわり