AtCoder ABC161
AtCoder ABC161解いた分だけまとめ。
今回はABC3完。Cでペナルティ叩きまくって爆死。
数学系の問題に手こずっている今日このごろ。
目次
A. ABC Swap
問題文通りに実装する。変数初期化の時点で最初の入れ変えをした。
ACしたコード
#coding:utf-8 x,y,z = map(int, input().split()) #step1 a = y b = x c = z #step2 a = z c = y print(a, b, c)
B. Popular Vote
少し問題文読み間違えていて、WA出してしまった。
全商品を降順に並べ替えて、ひとつずつそれが登録できる票数を
持っているか精査し、登録数mに達した時点で処理を抜ける。
ACしたコード
#coding:utf-8 import sys n, m = map(int, input().split()) a = list(map(int, input().split())) vote = sum(a) rank = sorted(a, reverse=True) border = vote / (4*m) #print(border, rank) count = 0 for i in range(0, n): if rank[i] >= border: count += 1 if count == m: print('Yes') sys.exit() print('No')
C. Replacing Integere
いちいち検証する処理を書くわけにはいかないので、サンプルから推察する。
それ以外にも、色々と紙に偶数・奇数などパターンを書き出していって、
以下の場合分けに落ち着いた。
まず、n<kの時は強制的に、nか|n-k|のどちらか小さい方に帰結する。
k=1かn=0、あるいはnがkの倍数の時は、最後0になる。
それ以外は、nをkで割った時の余りか、そこからさらにkを引いた絶対値のうち小さい方になる。
ACしたコード
#coding:utf-8 import math n, k = map(int, input().split()) if n < k: print(min(n, abs(n-k))) elif k == 1 or n == 0 or n%k == 0: print(0) elif n%k != 0: print(min(abs(n%k-k), n%k))