AtCoder Beginner Contest 063/AtCoder Regular Contest 075

はい。
https://atcoder.jp/contests/abc063

A - Restricted

Python3

a,b=map(int,input().split())
print(a+b if a+b<10 else 'error')

A+Bの足し算で。

B - Varied

Python3

s=input()
chk=len(s)
ans=set([i for i in s])
print('yes' if len(ans)==chk else 'no')

set型にして要素数が変わるか。setがなくても先頭から出現回数数えても十分間に合うはず。

C - Bugged

C++14

#include<bits/stdc++.h>
using namespace std;
 
int main(){
    int n,s,t,tmp=0;
    scanf("%d",&n);
    vector<int> a;
    for (int i=0;i<n;i++) {
        scanf("%d",&s);
        if (s%10==0) tmp+=s;
        else a.push_back(s);
    }
    sort(a.begin(),a.end());
    t=accumulate(a.begin(),a.end(),0);
    if (t%10==0 && t>0) t-=a[0];
    printf("%d\n",(tmp+t)%10==0?0:tmp+t);
    return 0;
}

10の倍数以外の総和で10の倍数以外の数が作れるか。総和が10の倍数になったら要素中の最小の数を外せば10の倍数ではなくなるのでそれを10の倍数だけ集めたもの(0があり得る)との和でなんとか。

D - Widespread

PyPy3

n,a,b=map(int,input().split())
t=a-b
 
ans=[0]*2
 
d=[]
for i in range(n):
    h=int(input())
    d.append(h)
d.sort(reverse=True)
ans[1]=max(d)
while ans[1]-ans[0]!=1:
    x=z=(ans[1]+ans[0])//2
    y=x*b
    for i in range(n):
        p=d[i]-y
        if p<=0:
            break
        x-=(p+t-1)//t
        if x<0:
            break
    if x<0:
        ans[0]=z
    else:
        ans[1]=z
print(ans[1])

シミュは無理です。初期ではans[0]が0で絶対に爆発が足りない回数、a[1]が体力最大値で絶対に足りる回数にしてます。2つの数の和を2で割ったものを調べる用の回数とします。調べます。足りてる足りてないによってどちらかの数を更新します。更新された数の和を2で割ったもので調査を繰り返します。2つの数の差が1になるまで繰り返します。
爆発回数が足りているかは爆発ダメージBと回数の積より大きな体力のあるものが爆発ダメージAの攻撃対象として調べます。