AtCoder Beginner Contest 103

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

A - Task Scheduling Problem

Python3

a=[int(i) for i in input().split()]
ans=100000
for i in range(3):
    for j in range(3):
        for k in range(3):
            if i==j or i==k or j==k: continue
            ans=min(ans,abs(a[i]-a[j])+abs(a[j]-a[k]))
print(ans)

全部調べる。

B - String Rotation

Python3

a=input()
b=input()
for i in range(101):
    if a==b:
        print("Yes")
        exit()
    a=a[-1]+a[0:-1]
print("No")

全部調べる。

C - Modulo Summation

Python

def gcd(a,b): return a if b==0 else gcd(b,a%b)
def lcm(a,b): return a*b//gcd(a,b)
 
n=int(input())
a=[int(i) for i in input().split()]
tmp=a[0]
ans=chk=0
for i in range(1,n):
    tmp=lcm(tmp,a[i])
if n%2!=0: tmp=lcm(tmp,a[-1])
y=tmp-1
p=0
for i in a:
   p+=y%i
print(p)

覚えてない。最小公倍数-1を解にしてるっぽい。

D - Islands War

Python3

n,m=map(int,input().split())
w=[]
for i in range(m):
    a,b=map(int,input().split())
    w.append((a,b))
w.sort(reverse=True)
d=[]
for i in range(m):
    a,b=w.pop()
    if i==0:
        d.append([a,b])
    else:
        if d[-1][1]<=a:
            d.append([a,b])
        elif d[-1][1]>b:
            d[-1][1]=b
print(len(d))

a,bを全部受け取ってからソートする。順に取り出していくとaがより小さい数が出現しないことが保証されるはず。bの座標次第で重複している区間があるかを調べる。重複があれば最も狭い区間になるよう調整する。重複がなければ新たに比較候補としてまた重複区間を探して重複区間を全て消すと解になるはず