LoginSignup
0
0

More than 3 years have passed since last update.

AtCoder Problems Training Easy(41~50)

Last updated at Posted at 2020-08-24

目次

1~10
11~20
21~30
31~40
41~50 ← 今ココ
51~60
61~70
71~80
81~90
91~100

41. ABC152 C - Low Elements

Difficulty:158

条件をまとめると、前から単調減少になる数値だけ抜き出したときの個数が答えになる。
単調減少とは$\ P_1>P_2>\dots\ $のことであり、 例4 から抜き出した数値は$\ 5>4>2>1\ $ の 4 つになる。

n = int(input())
p = list(map(int,input().split()))
ans = n
m = 2 * (10 ** 5)
for i in range(n):
    m = min(p[i],m)
    if p[i] > m:
        ans -= 1
print(ans)

42. ABC118 B - Foods Loved by Everyone

Difficulty:124

$\ M_i\ $番目の食べ物は、$\ K_j\ $が好きと答えなかった場合は候補から消しておく。
最終的に候補に残った数を答える。

n,m = map(int,input().split())
ans = ['Yes'] * m
for i in range(n):
    k = list(map(int,input().split()))
    k.pop(0)
    for i in range(m):
        if not i + 1 in k:
            ans[i] = 'No'
print(ans.count('Yes'))

43. ABC044 B - 美しい文字列

Difficulty:119

文字列$\ W\ $の重複をなくして、リスト$\ L\ $とする。
その後、$\ L_i\ $が$\ W\ $に偶数回出現するか判定する。

w = input()
x = list(set(w))
for i in range(len(x)):
    if w.count(x[i]) % 2 != 0:
        print('No')
        exit(0)
print('Yes')

44. ABC124 C - Coloring Colorfully

Difficulty:128

前から順番に交互になるように色を塗り替えていき、塗り替えた回数を数えておく。
ただし、$\ len(S)/2\ $回をを超える塗り替えは非効率なので、 先ほどと反対の色で塗り替えた回数を数える必要がある。
これは、$\ len(S)\ $から塗り替えた回数を引けば求まる。
例えば$\ 00101010\ $を塗り替える場合、前から順に判断すると$\ 01010101\ $で 7 回になるが、反対の色で塗り替えると$\ 10101010\ $になり、 1 回で済む。

s = list(input())
n = s[0]
ans = 0
for i in range(1,len(s)):
    if s[i] == n:
        ans += 1
        if s[i] == '0':
            s[i] = '1'
            n = '1'
        else:
            s[i] = '0'
            n = '0'
    else:
        n = s[i]
print(min(len(s) - ans,ans))

45. ABC090 B - Palindromic Numbers

Difficulty:126

$\ A \le i \le B\ $の間で、実際に$\ i\ $が回文かどうか調べる。

a,b = map(int,input().split())
ans = 0
for i in range(a,b+1):
    i = str(i)
    n = i[:2]
    m = i[:2:-1]
    if n == m:
        ans += 1
print(ans)

46. AGC024 A - Fairness

Difficulty:162

何度操作を行っても高橋君と中橋君の差の絶対値は変わらない。
そして、$\ 1 \le A,B,C \le 10^9\ $なので差の絶対値が$\ 10^{18}\ $以上になることもない。
$\ K\ $の回数が偶数なら$\ a-b\ $、奇数なら$\ b-a\ $を出力すればいい。
例えば$\ 1,4,5\ $の場合、$\ 1\ $回目の操作で$\ 9,6,5\ $、$\ 2\ $回目の操作で$\ 11,14,15\ $、$\ 3\ $回目の操作で$\ 29,26,25\ $となり、法則が合っていることが分かる。

a,b,c,k = map(int,input().split())
if k % 2 == 0:
    print(a-b)
else:
    print(b-a)

47. ABC079 B - Lucas Number

Difficulty:127

$\ L_{i-1}\ $を$\ A\ $、$\ L_{i-2}\ $を$\ B\ $とする。
最初、$\ A\ $は$\ 2\ $、$\ B\ $は$\ 1\ $である。
$\ A+B=C\ $とし、$\ A=B\ $、$\ B=C\ $と値を更新していくことで、$\ N\ $番目のリュカ数を求められる。
ただし、$\ N=1\ $の時に$\ 1\ $を出力するようにしておく必要がある。

n = int(input())
a = 2
b = 1
if n == 1:
    print(1)
else:
    for i in range(2,n+1):
        ans = a + b
        a = b
        b = ans
    print(ans)

48. ABC139 C - Lower

Difficulty:129

前から順番に$\ H_i \ge H_{i+1}\ $かどうかを調べる。
もし$\ H_i < H_{i+1}\ $なら、今までに移動した回数を最大回数と比較する。
例3 のように移動回数を数えるので、最初に降り立ったマスは含めず、 0 回の移動もあり得る点に注意する。

n = int(input())
h = list(map(int,input().split()))
m = 0
ans = 0
for i in range(n - 1):
    if h[i] >= h[i + 1]:
        m += 1
    else:
        ans = max(ans,m)
        m = 0
print(max(ans,m))

49. ABC062 B - Picture Frame

Difficulty:135

囲んで出力するだけとなる。
最初と最後に$\ W+2\ $ の長さの # を出力し、途中の画素$\ a\ $は行ごとに前と後ろに # を足すだけで実現できる。

h,w = map(int,input().split())
a = list(input() for i in range(h))
print('#' * (w + 2))
for i in range(h):
    print('#' + a[i] +'#')
print('#' * (w + 2))

50. ABC059 B - Comparison

Difficulty:135

そのまま$\ A\ $と$\ B\ $の大きさを比較する。
制約が$\ 1 \le A,B \le 10^{100}\ $となっているが、そのまま比較しても特に問題はない。

a = int(input())
b = int(input())
if a > b:
    print('GREATER')
elif a < b:
    print('LESS')
else:
    print('EQUAL')
0
0
0

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