AtCoder Beginner Contest 023
はい。
https://beta.atcoder.jp/contests/abc023
A - 加算王
Python2
n=int(raw_input()) print n%10+n/10
%10と/10でそれぞれの桁を計算。
B - Cakes and Donuts
Python2
n=int(raw_input()) s=raw_input() ans='b' cnt=0 while n: if ans==s: print cnt break elif len(ans)>=len(s): print -1 break cnt+=1 if cnt%3==1: ans='a'+ans+'c' elif cnt%3==2: ans='c'+ans+'a' else: ans='b'+ans+'b'
手順をシミュしてあり得るかどうか確認する。
C - 収集王
Python3
r,c,k=map(int,input().split()) n=int(input()) d={} x=[0]*c y=[0]*r ans=0 for i in range(n): a,b=map(int,input().split()) a-=1 b-=1 x[b]+=1 y[a]+=1 if a in d: d[a].add(b) else: d[a]=set([b]) s={} for a,i in enumerate(x): if i in s: s[i].add(a) else: s[i]=set([a]) for a,i in enumerate(y): i=k-i if i in s: ans+=len(s[i]) if a in d:ans-=len(s[i]&d[a]) if i+1 in s and a in d and len(s[i+1]&d[a]): ans+=len(s[i+1]&d[a]) print(ans)
解説の言いなりに。各行と列ごとにいくつあるかでK個になる組み合わせを選ぶ。但し、選択した行と列の交点に飴がある場合は1つ減る 。それと合わせてK+1になる組み合わせで交点に飴があるものも解の候補になるのでこれを数える。