LoginSignup
0
0

More than 1 year has passed since last update.

AtCoder ABC225 挑戦!(Python)

Last updated at Posted at 2021-10-30

ABC225、コンテスト7回目の挑戦です!
泥臭い方法ではありますが、C問題まで完答できました!
C問題解いて、レートが+40くらいなので、あと5, 6 回C問題完答できたら、茶色突入ってところか。(希望的観測)

ABC225A
S=input()

#3文字の中に、同じ種類の文字が何種類あるかで場合分け
if len(set(S))==3:
    print(6)

elif len(set(S))==2:
    print(3)

else:
    print(1)

本当は、M種類同じ文字があると、3!/M!だが、そのまま数字書いてしまった。次から気をつける。

ABC225B
N=int(input())

#スターである条件は、すべてのa_bのどちらかに同じ数字が出現すること。
#リストを区切らずに格納して、数を数える。
a_b_list=[]
for i in range(N-1):
    a, b=map(int, input().split())
    a_b_list.append(a)
    a_b_list.append(b)

# print(a_b_list)

from collections import Counter
# print(Counter(a_b_list).keys())
# print(Counter(a_b_list).values())

if max(Counter(a_b_list).values())==N-1:
    print('Yes')

else:
    print('No')

a,b のすべてに、1回ずつ、計N-1回同じ数字が登場した場合に、スターとなる。

ABC225C
N, M=map(int, input().split())
matrix=[]

for i in range(N):
    B=[]
    B=list(map(int, input().split()))
    matrix.append(B)
# print(matrix)

#各種条件の一致を確かめる
Flag='Yes' #初期化、Aと一致するかどうか

#1) 列の次の要素は、1ずつの連続した数である。
for i in range(N):
    for j in range(M-1):
        if matrix[i][j]+1==matrix[i][j+1]:
            pass
        else:
            Flag='No'
            break
# print(Flag)

#2) 同じ列の次の行は、前の行の要素に7を足したものである。
for i in range(N-1):
    if matrix[i][0]+7==matrix[i+1][0]:
        pass
    else:
        Flag='No'
        break
# print(Flag)

a=matrix[0][0] #先頭の要素
#3) Mの数による条件
if M==1:
    pass
else:
    if a%7 in [_ for _ in range(1, 9-M)]:
        pass
    else:
        Flag='No'

print(Flag)

Aの行列は、
1 2 3 4 5 6 7
8 9 10 11 12 13 14
...
と続く、カレンダー形式の行列となっている。
与えられた行列Bが、Aの一部になっているかどうかを判定する問題。

スマートな方法がわからなかったので、行列Bについて、以下の3つの条件を順番に判定した。

1) それぞれの列の次の要素は、1ずつの連続した数である。

2) 同じ列の次の行は、前の行の要素に7を足したものである。
→1)で要素が連続しているかどうかは、判定しているので、それぞれの列の最初の要素のみ、判定を行う。

3) Mの数によって、最初の要素が満たす条件が変わってくる。
M=1の場合は、一番緩く、最初の要素B11はなんでもよい。
M=2の場合は、B11 % 7 in [1, 2, 3, 4, 5, 6]であればよい。(0以外)
M=3の場合は、B11 % 7 in [1, 2, 3, 4, 5]
...と続く
M=7の場合が一番厳しく、
B11 % 7 in [1]となる。
以上の条件を一般化すると、B11 % 7 in [_ for _ in range(1, 9-M)] となる。

かなり泥臭くやってしまったが、なんとかACできて、20分くらい余ったので、自分としては、上出来。
スマートな回答も調べて、参考にしておきたい。

次回も頑張りましょう。
お疲れさまでした。

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