AtCoder Beginner Contest 029

はい。 ooox
https://atcoder.jp/contests/abc029
当時はリアタイで参加していたようです。Python2のコードが放置されていたので書き直しました。

A - 複数形

PyPy3

print(input()+"s")

はい。単純に末尾にsを付け足すものでした。

B - カキ

PyPy3

ans=0
for i in range(12):
    s=input()
    if 'r' in s:
        ans+=1
print(ans)

各行の文字列にrが何個あるかは知る必要がないので、rを含んでいるかのみを確認すれば大丈夫だと思う。

C - Brute-force Attack

PyPy3(itertools使用)

import itertools
n=int(input())
w=list(itertools.product("abc",repeat=n))
ans=[]
for i in w:
    ans.append("".join(i))
ans.sort()
for i in ans:
    print(i)

PyPy3()

def sol(a,b):
    if a==0:
        print(b)
    else:
        for i in "abc":
            sol(a-1,b+i)
 
n=int(input())
sol(n,"")

itertools.productを使ったり再帰で書いたり。両方出来る知ってるほうがいいと思います。。

D - 1

PyPy3
記憶にないので提出した状況が詳細不明です。

n=int(input())
d=0
for i in range(11):
    d+=[0,1][n//(10**i)>0]
ans=0
for i in range(1,d+1):
    a=(n//pow(10,i))*pow(10,i-1)
    b=n%pow(10,i)
    if (b>=2 * pow(10,i-1)):
        b=pow(10,i-1)
    elif (b<pow(10,i-1)):
        b=0
    else:
        b=b-pow(10,i-1)+1
    ans+=a+b
print(ans)

なんとか桁DPでやり直し

n=input()
l=[int(i) for i in "0"+n]
dp=[[[0]*12,[0]*12] for _ in "ww"]
dp[0][0][0]=1
for i,j in enumerate(l):
    if i==0: continue
    for k in range(11):
        if dp[i%2-1][0][k]:
            dp[i%2][0][k+(j==1)]=1
            dp[i%2][1][k+1]+=(j>1)
            dp[i%2][1][k]+=[[1,j-1][j>1],0][j==0]
        if dp[i%2-1][1][k]:
            dp[i%2][1][k+1]+=dp[i%2-1][1][k]
            dp[i%2][1][k]+=dp[i%2-1][1][k]*9
    for k in range(24):
        dp[i%2-1][k//12][k%12]=0
ans=0
for i in range(4):
    for j in range(1,12):
        ans+=dp[i//2][i%2][j]*j
 
print(ans)

不明の方は不明です。
あと想定解が桁DPではないらしいです。1の出現する周期、連続でいくつあるかとかに注目するらしいです。よく分かりません。
桁DPするならNが最大で109らしいです。少し余裕をもって配列用意して桁DP。少し慣れてきた気がします。