AtCoder Beginner Contest 237 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A – Not Overflow
PythonのintはC++のlong longと違って上限がないので、そのまま実装。
n = int(input())
if -2 ** 31 <= n < 2 ** 31:
print('Yes')
else:
print('No')
B – Matrix Transposition
行と列を入れ替えてループを回す。
h, w = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(h)]
ans = []
for i in range(w):
temp = []
for j in range(h):
temp.append(a[j][i])
ans.append(temp)
for i in ans:
print(*i)
numpyを使えば.Tで行列のtransposeを得ることが出来るので簡単。
import numpy as np
h, w = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(h)]
a = np.array(a)
ans = a.T
for i in ans:
print(*i)
C – kasaka
好きなだけ先頭にaを足せるので、末尾から連続するaは全て相殺できる。
先頭と末尾から始まるポインタを2つ用意し、1つずつ進めていくことを考える。
先頭と末尾の両方にaがある場合と、末尾だけにaがある場合があるので、それぞれの状態でポインターを進めていく。
s = input()
n = len(s)
l = 0
r = n - 1
while s[l] == s[r] == 'a' and l < r:
l += 1
r -= 1
while s[r] == 'a' and l < r:
r -= 1
これで、ポインタをa以外の文字の所までことが出来た。
後は残りの文字列が回分かどうか判定すれば解決。
while l < r:
if s[l] != s[r]:
break
l += 1
r -= 1
print('Yes' if l >= r else 'No')
D – LR insertion
リンクリストを使って順番に処理しようか考えていたが、うまく行かなかった。
逆順で処理することにより、両端キューを使って高速に解くことができた。
LRが反転するのことに注意。
from collections import deque
n = int(input())
s = input()
ans = deque([n])
for i in range(n - 1, -1, -1):
if s[i] == 'R':
ans.appendleft(i)
else:
ans.append(i)
print(*ans)
コメント