#目次
1~10
11~20
21~30
31~40 ← 今ココ
41~50
51~60
61~70
71~80
81~90
91~100
#31. ABC063 B - Varied
Difficulty:102
元の文字列$\ S\ $の長さを調べておく、これを$\ N\ $とする。
その後、$\ S\ $の重複をなくし、 長さを調べる、 これを$\ M\ $とする。
$\ N=M\ $ならすべての文字が異なっていることが分かる。
s = list(input())
i = len(s)
s = list(set(s))
j = len(s)
if i != j:
print('no')
else:
print('yes')
#32. ABC052 B - Increment Decrement
Difficulty:103
最初、$\ x=0\ $の状態から、$\ N\ $回の操作を実際に行う。
$\ S_i\ $の操作を行うたび、最大値か確認しておく。
n = int(input())
s = input()
x = 0
ans = 0
for i in range(n):
if s[i] == 'I':
x += 1
else:
x -= 1
ans = max(ans,x)
print(ans)
Difficulty:104
$\ S_1 \dots S_A\ $の範囲に - が存在しない。
$\ S_{A+1}\ $が - である。
$\ S_{A+2} \dots S_{A+B+1}\ $の範囲に - が存在しない。
郵便番号の形式となる 3 つの条件に当てはまるか調べる。
a,b = map(int,input().split())
s = input()
if '-' in s[:a]:
print('No')
elif s[a] != '-':
print('No')
elif '-' in s[a+1:]:
print('No')
else:
print('Yes')
#34. ABC087 B - Coins
Difficulty:109
500 円玉 $i$ 枚、 100 円玉 $j$ 枚、 50 円玉 $k$ 枚の合計金額が $X$ になるか順に計算する。
a = int(input())
b = int(input())
c = int(input())
x = int(input())
ans = 0
for i in range(a+1):
for j in range(b+1):
for k in range(c+1):
if 500*i + 100*j + 50*k == x:
ans += 1
print(ans)
#35. ABC071 B - Not Found
Difficulty:111
文字列$\ S\ $から重複した文字を消しておき、$\ a \dots z\ $のアルファベットが存在するか順に調べる。
存在しない場合はその文字が答えになるが、全て存在した場合は None になる。
s = list(input())
s = set(s)
m = 'abcdefghijklmnopqrstuvwxyz'
for i in range(len(m)):
if not m[i] in s:
print(m[i])
exit(0)
print('None')
#36. ABC127 C - Prison
Difficulty:193
全てのゲートを 1 枚のカードで通過する場合、$\ \max(L) \le P \le \min(R)\ $のカードを持っていればよい。
$\ \max(L)=4、\min(R)=3\ $の場合、$\ \min(R)\ $を通るために$\ P \le 3\ $にすると$\ \max(L)\ $が通れず、$\ \max(L)\ $を通るために$\ P \ge 4\ $にすると$\ \min(R)\ $が通れず、 1 枚で通れないことが分かる。
n,m = map(int,input().split())
k = [list(map(int,input().split())) for i in range(m)]
l,r = [list(i) for i in zip(*k)]
x = max(l)
y = min(r)
print(max(y-x+1,0))
#37. ABC141 C - Attack Survival
Difficulty:120
点数が$\ 0\ $以下になると脱落ということは、$\ Q\ $問あるうち$\ K-1\ $問は正解できなくてもよい。
つまり、$\ Q-K+1\ $正解すれば勝ち抜けということになる。
各参加者の正解数を数えて、勝ち抜けか脱落かを判別する。
n,k,q = map(int,input().split())
a = list(int(input()) for i in range(q))
z = [0] * n
for i in range(q):
z[a[i]-1] += 1
for i in range(n):
if z[i] >= q - k + 1:
print('Yes')
else:
print('No')
Difficulty:118
全ての料理が届く時刻を最も早くするには、理想は最後の料理が$\ A \mod 10=1\ $で届くことであり、避けたいのは最後の料理が$\ A \mod 10=0\ $で届くことである。
$\ 11,20\ $の料理なら、届く時間は$\ 11,20\ $で 40 、$\ 20,11\ $で 31 とかなりの差が出てしまう。
全ての料理の 1 の位の値を調べておき、 0 以外で一番小さい数字が最後の料理になるよう調整する。
なお、1 の位が全て 0 なら全ての時間を合計するだけでよい。
a = []
for i in range(5):
a.append(int(input()))
p = 10
for i in range(5):
if a[i] % 10 != 0:
p = min(p,a[i]%10)
ans = 0
for i in range(5):
if a[i] % 10 != 0:
if a[i] % 10 == p:
ans += a[i]
p = 10
else:
ans += a[i] - a[i] % 10 + 10
else:
ans += a[i]
print(ans)
#39. ABC134 C - Exception Handling
Difficulty:124
出力する数は 2 つだけに絞れる。
$\ A_i \neq \max(A)\ $の場合、最大値は$\ \max(A)\ $。
$\ A_i= \max(A)\ $の場合、最大値は 2 番目に大きい数。
ソートなどを使って、あらかじめ上二つの値を調べておく。
例えば$\ 1,2,3,4,5,6\ $なら出力は$\ 6,6,6,6,6,5\ $となる。
n = int(input())
a = list(int(input()) for i in range(n))
b = sorted(list(a))
x = b[-1]
y = b[-2]
for i in range(n):
if a[i] != x:
print(x)
else:
print(y)
Difficulty:64
$\ a \le 0 \le b\ $なら、 0 を掛けることになるので答えは Zero になる。
$\ 0<a \le b\ $なら、正のみを掛けることになるので答えは Positive になる。
$\ a \le b<0\ $なら、$\ - \times -=+\ $ になることから、$\ 負の個数 \mod 2=0\ $になる場合、答えは Positive になり、そうでないなら Negative になる。
a,b = map(int,input().split())
if a <= 0 <= b:
print('Zero')
elif 0 < a <= b:
print('Positive')
else:
if (b - a + 1) % 2 == 0:
print('Positive')
else:
print('Negative')