hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder ABC255 振り返り

A - You should output ARC, though this is ABC.【AC】

 言われた通りにします.atcoderは大抵1-indexなので,入力された数字は-1する事を忘れないようにします.

R, C = map(int, input().split())
A = []
A.append([int(i) for i in input().split()])
A.append([int(i) for i in input().split()])

print(A[R-1][C-1])
B - Light It Up【AC】

 N<1000なので全探索しても間に合います.
 光源とその他の点同士の距離を求めておきます.距離をソートしておき,距離が小さい方からその点は光に照らされたとしてカウントしていきます.カウントがNになったらその時の距離を答えとして出力します.あらかじめ距離をソートしているので,始めにカウント==Nとなった時の距離が最小の距離となります.
 最初の提出時には距離を入れるリストdisに,距離と相手の点の2つの要素が入ったリストをappendしていましたが,これではTLEになりました.リストのソートは各要素に対してソートを回すので遅くなります.disに2つの要素が入ったリストをappendするのではなく距離のみをappendするようにしました.そして,それに対応する相手の点は距離がkeyで相手の点をvalueにした辞書を作るようにしました.これでソートが早くなりACする事が出来ます.

N, K  =map(int, input().split())
A = [int(i)-1 for i in input().split()]
tizu = []
for _ in range(N):
    tizu.append([int(i) for i in input().split()])

dis = []
dic_dis = {}
for a in A:
    for j in range(N):
        if a == j:
            continue

        d = (abs(tizu[j][0] - tizu[a][0])**2 + abs(tizu[j][1] - tizu[a][1])**2)**(1/2)
        dis.append(d)
        dic_dis.setdefault(d, [])
        dic_dis[d].append(j)

dis = sorted(dis)        
dic = {i:0 for i in range(N)}
cou = K
for a in A:
    dic[a] = 1


ans = 0
for d in dis:
    for k in dic_dis[d]:
        if dic[k] == 0:
            cou += 1
            dic[k] = 1
            ans = d
        
    if cou >= N:
        print(ans)
        break
C - ±1 Operation 1【AC】

 初項と項数が決まっているため,良い数の上限下限が決まっています.Xがその範囲に入るかどうかでまず処理を変えます.範囲に入らなかった場合,単純にXから上限下限の値を引けば求まります.
 良い数はA+(N-1)Dで求まります.この問題はX-(A+(N-1)D)が最小となるようなNを求めれば良いです.そこで,X=A+(N-1)DとなるようなNが存在すると仮定してN=(X-A)/D+1を求めます.勿論そのようなNが存在しない事もあるので(X-A)/Dが割り切れない事があるので切り捨てしておきます.切り捨ての関係でNが最も最適なNか分からないためN-1,N,N+1についてA+(N-1)Dを求め,それとXの差の最小値を求めれば解になります.

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

if D >= 0 and X <= A:
    print(A-X)
elif D < 0 and X >= A:
    print(X-A)
elif D >= 0 and X >= A + (N-1)*D:
    print(X-(A + (N-1)*D))
elif D < 0 and X <= A + (N-1)*D:
    print(A + (N-1)*D-X)
else:
    n = (X-A)//D + 1
    nm1 = n-1
    np1 = n+1
    print(min(abs(X - (A+(nm1-1)*D)), abs(X - (A+(n-1)*D)), abs(X - (A+(np1-1)*D))))