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番目からだったりしますけど細かいことは気にせずに。