競プロ弱者の解答

競プロ弱者の成長記録

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

今日はABC094のバーチャルコンテストで復習です。
明日のABC156に向けて早解きの練習です。

〇コンテスト名:ABC094

〇配点:不明

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

〇今回の方針

 本番のコンテストのつもりで解く

 明日への景気付に、気分良くノーミス早解きを決めましょう。

コンテスト開始!
A - Cats and Dogs
猫がA匹、猫か犬かわからない生き物がB匹いる??
猫がX匹いる可能性があるか判定せよ。
A<=X<=A+Bが満たせれば”YES”、満たせなければ”NO”ですね。

A,B,X=map(int,input().split())
if A<=X<=A+B:
    print("YES")
else:
    print("NO")

1:28 AC
Pythonだと、A<=X<=A+Bの書き方ができるんですよね。
もちろんA<=X and X<=A+Bと書いてもOKです。

B - Toll Gates

最初Xにいて、0かNを目指す。
Aには料金所があり、通るには1円が必要。
0かNへたどり着ける最小金額を求めよ。

Aのうち、Xより小さいもの、Xより大きいものを数えて、小さい方を出力すれば良いですね。

N,M,X=map(int,input().split())
A=list(map(int,input().split()))

Low=0
High=0

for i in range(M):
    if A[i]<X:
        Low+=1
    else:
        High+=1
print(min(Low,High))

5:42 AC

C - Many Medians
偶数個のNの数列がある。
それぞれを取り除いた後の数列の中央値を求めよ。

まず、N個の状態の中央2つ(小さい方をA、大きい方をBとする)のどちらかが1つ取り除いた後の中央値になります。
A以前を取り除けば、Bが、B以降を取り除けばAが中央値となります。

N=int(input())
X=list(map(int,input().split()))

import copy
x=copy.deepcopy(X)
x.sort()
A=x[N//2-1]
B=x[N//2]

for i in range(N):
    if X[i]<=A:
        print(B)
    else:
        print(A)

14:15 AC

D - Binomial Coefficients

n個のものから順番を無視してr個選ぶ。
aの中から2つ選び、ai個のものからaj個選ぶ方法が最大となるai,ajの組み合わせを求めよ。

aiは最も大きい数字となるのは良いとして、
ajはaiの半分に最も近いものであることは大丈夫でしょうか?

組み合わせの計算の際にある程度慣れれば自然に考察できるようになると思いますが、
そうでなければこれに気づくのは大変そうです。

はいAC!あれ??
最後の最後でWAってテストケース。
何をやっているのでしょう。
aiとajに同じ数字を当てはめていました。

n=int(input())
a=list(map(int,input().split()))

MAX=max(a)
Harf=MAX/2

cnt=10**20
ans=0
for i in range(n):
    if MAX==a[i]:
        continue
    elif abs(Harf-a[i])<cnt:
        ans=a[i]
        cnt=abs(Harf-a[i])
print(MAX,ans)

20:54 AC 1ペナ

結局20:54全完(4完) 1WA
明日への景気付け失敗。
WA自体はある程度仕方がないですが、テストケースで通らない答えを投げてはいけません。