勉強競技プログラミング

ABC183

スポンサーリンク

最近むずすぎじゃないすかね…

A問題こそ余裕だったがB問題からして???数学に弱すぎるだろ俺…
後回しにしてC問題。いやこれもずいぶん難しいね…F問題の方が簡単そうに見える(解けるとは言っていない)
Cなんとか解いてDわからないんでいったんB解く。さすがにある程度考がえると答えがわかったので。解く。割と時間が余っていたが、Dで転ぶ。
 Dが区間スケジューリングのようでようではないのであきらめかけるが、いもす法で行けるのではと気づく。使ったことがないのでいもすさんのホームページで勉強しながら解く。この時点で89分を消費。5問目が解けるわけもなく終了。1完で投げようとすらしたので、頑張ってよかった。

C – Travel

見るからに階乗を使いそうな構造。最初と最後の処理が面倒になったのでもっといい方法があるのではないかとは思う。C問題の中でもトップクラスにむずくないですかね?灰パフォですかそうですか

import itertools
import math
N, K = map(int, input().split())

#S = [[0 for j in range(3)] for i in range(2)] 2行3列の場合
S = [[0 for j in range(N)] for i in range(N)]
for i in range(N):
    T = list(map(int, input().split()))
    for j in range(N):
        S[i][j] = T[j]
    




T = []
for i in range(1,N):
    T.append(i)


D = list(itertools.permutations(T))

cnt=0
for i in range(len(D)):
    cost=0
    cost+=S[0][D[i][0]]
    #print(cost)
    for j in range(N-2):
        cost+=S[D[i][j]][D[i][j+1]]
        #print("mohu")
    
    cost+=S[D[i][N-2]][0]

    #print(cost)
    if cost==K:
        cnt+=1
print(cnt)

D – Water Heater

 区間スケジューリングっぽいしとりあえず、入力を処理するところまで進める。あれ、3列目どう対処すればいいんだとなり積む。なんとなくいもすほうが使えそうな(使ったことない)ためいもすさんのホームページで勉強する。というか1次元のやつをpythonに変換しつつ使う。

N,W=map(int,input().split())

#S = [[0 for j in range(3)] for i in range(2)] 2行3列の場合
S = [[0 for j in range(3)] for i in range(N)]

for i in range(N):
    A,B,l=map(int,input().split())
    S[i][0]=A
    S[i][1]=B
    S[i][2]=l


T=sorted(S,key=lambda x:x[1])
#U=sorted(T,key=lambda x:x[1])

#print(T)

table=[0]*200010
for i in range(N):
    table[T[i][0]]+=T[i][2]
    table[T[i][1]]-=T[i][2]

for i in range(200010):
    if (0<i): table[i] += table[i-1]

M=0
for i in range(200010):
    if M < table[i]:
        M=table[i]

#print(M)
if M>W:
    print("No")
else:
    print("Yes")

        

 B問題がやたらと苦手な分野で、サンプル1見て多分こうだろという仮説の式を立ててサンプル2が合うの確認してなげたら通った。Dは割と典型だし、素早く通してE問題に取り掛かれるだけの時間を残せるようになりたい。
 これで6連続レーティング上昇となったが、ぶっちゃけこれやってる場合ではない。2日後には初の子が生まれ、会社ではプロジェクトが炎上しているのである。

コメント

タイトルとURLをコピーしました