LoginSignup
0
0

More than 1 year has passed since last update.

AtCoder ABC258 A-C (Python)

Last updated at Posted at 2022-07-02

はじめに

  • python初心者+Atcoder初心者です。解いた(+解説集等を参考に学習した)問題を投稿させていただきます。
  • アドバイス等あれば、是非お願いいたします。

AtCoder Biginner Contest 258問題リンク

A - When?

問題文はこちら

  • Kの値を60で割った商と余りを使用する。
K = int(input())
mod = K % 60
q = K //60
H = 21 + q
if mod < 10:
  M ="0%s"%mod
else:
  M ="%s"%mod
print("%s:%s"%(H,M))

B - Number Box

問題文はこちら

  • 出発点及び移動したマスを全探索。
  • マス目の上下左右がつながっていることに関しては、Nの余りを取ることで考える。
#標準入力
N = int(input())
arr = [list(map(int,input())) for x in range(N)]
#探索時のベクトル
p = [1,1,1,0,0,-1,-1,-1] #左右の探索
q = [1,0,-1,1,-1,1,0,-1] #上下の探索

ans =0
for i in range(N):
    for j in range(N):
        for k in range(len(p)):
            now = 0
            #初期位置
            x = i
            y = j
            for l in range(N):
                now*=10
                now+=arr[x][y]
                x+=p[k]
                y+=q[k]
                x%=N #左右端移動時の対策
                y%=N #上下端移動時の対策
            ans = max(ans,now)
print(ans)

C - Rotation

問題はこちら

  • 「S の末尾の文字を削除し、先頭に挿入する」という操作を実施した回数だけを考える。(愚直に計算した場合、実行制限時間に間に合わない。)
  • 上記の操作をP回した後の文字列のi番目の文字は、操作する前の文字列の$(i-P)\mod N$番目の文字

例)
文字列:abcdefg (7文字)
3回操作した後の文字列の5番目の文字を考える。
下記の計算より、操作前文字列の2番目の文字であるとわかる。

$\begin{align}
\underset{文字列の順番(操作後)}{\underline{(5}}-
\underset{操作回数}{\underline{3}}\quad)
\mod
\underset{文字列の長さ}{\underline{7}}=
\underset{文字列の順番(操作前)}{\underline{2}}
\end{align}$

操作回数 文字列
0 abcdefg
1 gabcdef
2 fgabcde
3 efgabcd
N,Q = map(int,input().split())
S = str(input())
arr = [list(map(int,input().split())) for x in range(Q)]
 
P =0
for i in range(len(arr)):
    if arr[i][0] == 1:
        P+= arr[i][1]
    else:
        num = (arr[i][1] -  P) % N -1
        print(S[num])
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0