AtCoder Beginner Contest 188 A〜C問題
前書き
本日は死ぬほど頭が回っておらず、C問題でやたら躓いてしまいました。
ほんとダメです。思考の視野を広げないといけません。
A問題
難易度:灰
時間:2分
X,Y=map(int,input().split()) if min(X,Y)+3>max(X,Y):print('Yes') else: print('No')
B問題
難易度:灰
時間:2分
N = int(input()) A = list(map(int,input().split())) B = list(map(int,input().split())) _sum = 0 for i in range(N): _sum+=A[i]*B[i] if _sum==0: print('Yes') else: print('No')
C問題
難易度:灰
問題自体は2**N人のトーナメント制で準優勝に該当する学生番号を回答する問題。
最初計算量の観点から見ても、1つずつトーナメントで競わせながら、最後に残った2人のうちの準優勝を出力するという解き方で実装していました。
ところが考えを変えてみると、前半・後半の半分に分割した後、
前半・後半それぞれで最もスコアが高い学生を最後に競わせ、敗北した方(=準優勝)の学生番号を取得する方が簡単だと思いました。
np.argmax()が非常に便利な回です。
以下が実装コードです。
import numpy as np N = int(input()) A = np.array(list(map(int,input().split()))) harf = int(A.size/2) A_f,A_b=A[:harf],A[harf:] A_fmax = np.argmax(A_f) A_bmax = np.argmax(A_b) res = A_bmax+harf+1 if A[A_fmax]>A[harf+A_bmax] else A_fmax+1 print(res)
結果
今日はほんと出来が悪いです。。。
ここ数日、スランプのように問題が解けなくなってしまいました。