ABC320 25min 解答参照
s = input()
count = 1
# 外側のループ (i)
for i in range(len(s) - 1):
# 内側のループ (j)
for j in range(i + 1, len(s)):
# 部分文字列を取得
sub_str = s[i:j+1]
# 部分文字列が回文であるかチェック
if sub_str == sub_str[::-1]:
count = max(count, j - i + 1)
# 最長の回文部分文字列の長さを表示
print(count)
- 前から順に部分文字列を取得
- 部分文字列が回文であるかをチェック
- iは回文の開始地点、jは回文の終了地点を表している。j-i+1で回文の長さがわかる
- max関数を使うことで、それまでのcountと現在の回文の長さを比較してより長いほうをcountに保持できる
ABC319 53min 自力
N=int(input())
j_list = []
ans_list=[1]#0を割ったときの結果を先に入れておく
#10以下の約数リストの作成
for i in range(1,10):
if N%i == 0:
j_list.append(i)
#0を除く1~Nについて
for i in range(1,N+1):
for j in j_list:
L=i*j
if L%N == 0:
ans_list.append(j)
break
#if内条件を満たさなかった場合
else:
ans_list.append('-')
print("".join(map(str, ans_list)))
ABC318 9/20 解説参照 50min
n=int(input())
num_set = set()
for _ in range(n):
x1,x2,y1,y2 = map(int,input().split())
for a in range(x1,x2+1):
for b in range(y1,y2+1):
num=str(a)+str(b)
num_set.add(int(num))
print(len(num_set))
最初はこれでやろうとした。
三重ループになる点、(1,120)と(11,20)が同じとみなされてしまう点などが問題となり断念。
N = int(input())
ss = []
for _ in range(N):
A, B, C, D = map(int, input().split())
ss.append((A, B, C, D))
c = set()
for s in ss:
for x in range(s[0], s[1]):
for y in range(s[2], s[3]):
c.add((x, y))
S = len(c)
print(S)
これならいけた。数字として見るなんてめんどくさいことせずにタプルとして扱えばよかった。
N = int(input())
sheets = []
for _ in range(N):
A, B, C, D = map(int, input().split())
sheets.append((A, B, C, D))
grid = [[0] * 101 for _ in range(101)]
for A, B, C, D in sheets:
for x in range(A, B):
for y in range(C, D):
grid[x][y] = 1
total_area = sum(sum(row) for row in grid)
シートを作ってやるならこのやり方も。
ABC317 20min 自力
n=int(input())
num=list(map(int,input().split()))
num.sort()
for i in range(num[0],num[0]+n+1):
if not i in num:
print(i)
exit()
print(num[0])