AtCoder Beginner Contest 161 過去問 (A~C)

参照

atcoder.jp

A問題

AとB・Cの値を入れ替えるだけの問題です。

a = list(map(int, input().split(' ')))
k = a[0]
a[1],a[0] = a[0],a[1]
a[2],a[0] = a[0],a[2]
a=list(map(str, a))
aa = ' '.join(a)
print(aa)

B問題

N種類の商品人気投票に対して、
その得票数が全体の1/4Mとなる商品をM個選べるか判定する問題です。

n,m = map(int,input().split(' '))
hyou = list(map(int, input().split(' ')))
A = sorted(hyou, reverse=True)
Am = A[:m]
for a in Am:
    if a>=(0.25/m)*sum(hyou): continue
    else:
         print('No')
         exit(0)
print('Yes')

C問題

整数の差分を絶対値で置き換え続け、
最小値を割り出す問題です。
1≤N≤10**18のような大きい整数が使用されます。

N-Kの差分を置き換え続ける作業の前に、
x=|N-K|が最も0に近い値をとる地点の、
差分の挙動を監視しています。

N=10000000, K=10292
N-K = 9989708 

ここでN-Kを繰り返すのは埒が明かない。
剰余の計算を加えることによって、最小値に近い差分の挙動を監視。

N <= N%K = 6468
N <= |N-K| = 3824
N <= |N-K| = 6428
N <= |N-K| = 3824
N <= |N-K| = 6428
・・・
n,k = map(int, input().split())
 
shou,lis = n//k,[]
if shou!=0: n=n%(shou*k)
for i in range(10):
  n=abs(n-k)
  lis.append(n)
print(min(lis))