LoginSignup
0
0

More than 1 year has passed since last update.

AtCoder ABC227 挑戦!(Python)

Last updated at Posted at 2021-11-13

ABC227、コンテスト9回目の挑戦です。
Keyenceの名にびびったのか、A問題で35分もかかる失態。
B問題は、15分くらいでいけたが、C問題が全く解けずTLE。

ABC227A
N, K, A=map(int, input().split())

#K枚のカードをA番目の人から配っていく
#Nで割ったKのあまり分、何周もする場合があるため
mod_K=K%(N)

#最後のカードの人
if N==1:
    print(N)
else:
    if A+mod_K-1 <=N:
        print(A+mod_K-1)
    else:
        print(A+mod_K-1-N)

なんか似たような問題を、B問題で解いたような気がした。
何周もする場合があるので、modで余りを計算してから、if文で解いた。
が、N=1のときだけ、例外で処理しないとどうしてもうまくいかなかったので、それであれこれやってたら、35分もA問題にかけてしまった。
どうやったらスマートだったんだろうか。絶対あると思うから、勉強しよう。

ABC227B
N=int(input())

S_list=list(map(int, input().split()))
# print(N, S_list)

#面積
S_ab=0
#正の整数abによって可能な面積
S_ab_list=[]

for a in range(1,1000):
    for b in range(1,1000):
        #abのときの面積
        S_ab=4*a*b+3*a+3*b
        #面積制限
        if S_ab<=1000:
            S_ab_list.append(S_ab)
        else:
            pass
# print(S_ab_list)
# S_ab_list=set(S_ab_list)

#それぞれの人の面積が実現可能かどうかを判定
count=0 #確実に間違っている人の数
for i in S_list:
    if i not in S_ab_list:
        count+=1
    else:
        pass
print(count)

B問題は、正の整数abでありうる面積のリストを作っておいて、それがあるかどうかを判定した。
本当は、rangeの範囲もちゃんと考えた方がいいんだろうけど、両方1000で回した。無事AC。

C問題は、問題文が簡単そうに見えて難しかった。
当然のように、3重for文では、TLEするので、工夫する必要がある。
Cの値によって、B, Aの範囲が狭められそうというのは思ったのだが、Cの範囲によって、B, Aの回す範囲を変えていくのがどうやって書けばいいのかがわからず、ジエンド。
公式解説を見てみると、考えた方が逆で、A→B→Cの順で狭めていけばよかった。
実装は、for文で回しておいて、if文でbreakすればよかった。たしかにそうだ。。。

最後は順位表眺めて、何位くらいかなーというのを見てた。
なんか最近こういうの多いな。惨敗です。

お疲れさまでした。

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