競プロ弱者の解答

競プロ弱者の成長記録

ABC092(バーチャル):水色競プロerの復習

3連休最終日、今日も朝から過去ABCで復習です。
〇コンテスト名:ABC092

〇配点:不明

〇制限時間100分(A~Dまでの4問の時代のコンテスト)

〇今回の方針

 休みの朝なのでコーヒー片手に気楽にいきましょう。

コンテスト開始!
A - Traveling Budget
バスと電車で旅行する。
バスはA円orB円
電車はC円orD円
最安値を求めよ。

AとBの安いほうとCとDの安いほうを足せばよいですね。
適当にやってしまい、効率の悪いコードになってしまいました。
リストに入れてソートして・・

Bus=[]
Train=[]

for i in range(2):
    b=int(input())
    Bus.append(b)
for i in range(2):
    t=int(input())
    Train.append(t)
Bus.sort()
Train.sort()
print(Bus[0] + Train[0])

2:32 AC
普通にA,B,C,Dをintで受けて、min(A,B)+min(C,D)を出力すべきでしょう。

B - Chocolate

N人がいて、D日間の間にそれぞれ1+Ai日目にチョコレートを食べる。
最後にX個のチョコレートが残っていた。
最初にチョコレートはいくつあったか。

100人で100日まで。最大でも10^4オーダーなので全探索決定。
ansを用意して、2重ループ。
1+A日ごとにans+=1
1+A>Dになったら終了。
これをN人分繰り返し、最後にansにXを足しましょう。

N = int(input())
D,X = map(int,input().split())
ans=0
for i in range(N):
    cnt=0
    A=int(input())
    for j in range(101):
        if 1+A*j>D:
            break
        else:
            cnt+=1
    ans += cnt
print(ans + X)

6:29 AC

C - Traveling Plan

x座標上のN個の点を順に訪れる。
移動コストは|a-b|円
各点を訪れなかった場合の合計移動コストを求めよ。

全部の点を訪れるコストを最初に求めておき、
各点(A)を訪れなかった場合は、
全点コスト-|Ai-A(i-1)|-|A(i+1)-Ai|+|A(i+1)-A(i-1)|ですね。

N=int(input())
X = [0]+list(map(int,input().split()))+[0]
SUMX = 0
for i in range(1,len(X)):
    SUMX += abs(X[i-1] - X[i])
for i in range(1,N+1):
    print(SUMX + abs(X[i-1] - X[i+1]) - abs(X[i] - X[i-1]) - abs(X[i+1] - X[i]))

14:04 AC

D - Grid Components
100x100のグリッド内で白連結成分A個、黒連結成分B個を作成せよ。

白2個、黒3個ならこんな感じで良いですね。
最初に上は全部白マス、下は全部黒マス。これで白黒1つずつの連結成分。
次に、白連結成分をつくりたければ、黒マスの中に1x1の白マスを埋めていく。
黒連結成分も同様に。
f:id:syunsuk1024:20200224105018p:plain

A,B = map(int,input().split())

print(100,100)
L=[]
for i in range(50):
    L.append(["#" for j in range(100)])
for i in range(50):
    L.append(["." for j in range(100)])

A-=1

for i in range(50):
    for j in range(25):
        if A>0:
            L[i*2][j*2] = "."
            A -=1
B-=1

for i in range(50):
    for j in range(25):
        if B>0:
            L[51 + i*2][j*2] = "#"
            B-=1
for i in range(100):
    print("".join(L[i]))

30:52 AC

白の大きな連結成分にくっつく形で白1x1マスを作って1WA
出力形式のミス(グリッド間に空白をいれてしまった)で1WA
実際のコンテストだったら発狂ものですね。