AtCoder Begginer Contest 103 A〜C問題・典型90問(10問目)
前書き
AtCoder Begginer Contest 103 A〜C問題・典型90問(10問目)を解きました。
B問題
- 難易度:灰
- 時間:3分
import sys S=input() T=input() for i in range(len(S)): S=S[-1]+S[:-1] if S==T: print('Yes') sys.exit() print('No')
C問題
- 難易度:茶
- 時間:5分
サンプル例の入力と出力の規則を解き解法を導きました。
f(m)が最大となるときは各(ai - 1)の最小公倍数であり、これは必ず存在します。
全ての(ai-1)の積は存在するためです。
ならば(ai - 1)の合計がf(m)となります。
N=int(input()) a = map(int,input().split()) print(sum(a)-N)
典型90問(10問目)
- 難易度:C問題クラス
- 時間:16分
【10 日目】
— E869120@公開アカウント (@e869120) 2021年4月8日
昨日の解説と今日の典型問題です。今日は初級者向けの典型です。今週もあと 2 日なので頑張りましょう!(昨日と同様、入力形式・入出力例は GitHub を参照のこと) #競プロ典型90問 pic.twitter.com/2lAFm3Fjld
瞬時に累積和を使えば1重ループで解けると確信できました。
1組、2組のそれぞれで学籍番号順にスコアの累積和を格納した配列を作成します。
その後、境界となる学籍番号L〜Rに該当する累積和の差分を取得すれば区間和を出力できます。
N=int(input()) lis = [[0 for i in range(N)] for j in range(2)] for n in range(N): C,P = map(int,input().split()) lis[C-1][n]=P for j in range(2): _sum = 0 for i in range(N): _sum += lis[j][i] lis[j][i] = _sum Q = int(input()) for q in range(Q): L,R = map(int,input().split()) if L>1: class1,class2 = lis[0][R-1]-lis[0][L-2],lis[1][R-1]-lis[1][L-2] else: class1,class2 = lis[0][R-1],lis[1][R-1] print(class1,class2)