AtCoder Beginner Contest 150 過去問(A~C)

参照

atcoder.jp

A問題

難なく突破。

k,x = map(int, input().split())
if 500*k>=x: print('Yes')
else: print('No')

B問題

A問題くらい簡単でした。

input()
print(input().count('ABC'))

C問題

N個の数字で形成された順列が用意され、
順列にはN!通りの並び順が存在します。
与えられたpとqの順列が小さい順から何番目の順列が計算し、
その差を求めるというのもの。

方法自体は頭に浮かんでましたが、
実装に時間がかかってしまいました。

一桁目を知ればだいたい順列がどの位置にいるかわかります。
二桁目を知ればさらに具体的な位置がわかります。
三桁目は・・・
という風に要素の位置を数字を元に探索していきます。
これでメモリも時間も節約できます。

n = int(input())
p = list(map(int, input().split()))
q = list(map(int, input().split()))
 
num_,j = [1],1
for i in range(1,n+1):
  j*=i
  num_.append(j)
 
def cul(n_, lis_):
  l=[]
  for i in range(1,n+1):
  	l.append(i)
  sum_=0
  for i in range(1,n_):
    lenl=len(l)