AtCoder Beginner Contest 105
はい。
https://atcoder.jp/contests/abc105
A - AtCoder Crackers
Python3
n,k=map(int,input().split()) print([0,1][n%k!=0])
差枚数は0,1のどちらかだけになるはずだと思う。
B - Cakes and Donuts
Python3
n=int(input()) for i in range(25): for j in range(25): if n==i*4+j*7: print("Yes") exit() print("No")
数学的に求めること可能らしいですが数学はわからないのでループで調べる。
C - Base -2 Number
Python3
n=int(input()) ans="" while n!=0: if n%2!=0: n-=1 ans="1"+ans else: ans="0"+ans n=-n>>1 print(ans if ans!="" else 0)
%2で余り1のありなしで1,0を付け加えて、もし余りありだったならnから1を引いておく、nを-2で割る。また%2で余り1のありなしを〜繰り返す。-2で割るの部分は -n>>1
で記述してます。詳しくは解説資料と解説動画見てください。。。
D - Candy Distribution
Python3
n,m=map(int,input().split()) l=[int(i) for i in input().split()] ans=t=0 d={0:1} for i in l: t=(t+i)%m if t in d: d[t]+=1 else: d[t]=1 for i in d: ans+=d[i]*(d[i]-1) print(ans//2)
mod mで余りだけ見ながら累積和を取る。右端と左端の余りが同じ区間だけがM人の子供にお菓子を均等に配ることが出来る。右端:全体の累積和で余りXに対して左端:同じく余りXを取り除くことになって余り0で均等に配布出来るようになる。実際に配布するのは左端+1番目からだったりしますけど細かいことは気にせずに。