tag:crieit.net,2005:https://crieit.net/tags/Python%E3%81%A7%E7%AB%B6%E3%83%97%E3%83%AD/feed 「Pythonで競プロ」の記事 - Crieit Crieitでタグ「Pythonで競プロ」に投稿された最近の記事 2019-06-14T07:56:24+09:00 https://crieit.net/tags/Python%E3%81%A7%E7%AB%B6%E3%83%97%E3%83%AD/feed tag:crieit.net,2005:PublicArticle/15105 2019-06-14T07:56:24+09:00 2019-06-14T07:56:24+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-123C-Python # AtCoder Beginner Contest 123CをPythonで解く <h1 id="Five Transportations"><a href="#Five+Transportations">Five Transportations</a></h1> <ol> <li><a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc123/tasks/abc123_c">Five Transportations</a></li> </ol> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <blockquote> <p>AtCoder社は成長し、2028 年になってついに6つの都市 (都市1,2,3,4,5,6) からなる AtCoder 帝国を作りました!<br /> AtCoder帝国には5つの交通機関があります。<br /> 電車:都市1から2まで1分で移動する。1つの電車にはA人まで乗ることができる。<br /> バス:都市2から3まで1分で移動する。1つのバスには B人まで乗ることができる。<br /> タクシー:都市3から4まで1分で移動する。1つのタクシーにはC人まで乗ることができる。<br /> 飛行機:都市4から5まで1分で移動する。1つの飛行機にはD人まで乗ることができる。<br /> 船:都市5から6までを1分で移動する。1つの船にはE人まで乗ることができる。<br /> それぞれの交通機関は、各整数時刻 (0,1,2,3,...) に、都市から出発します。<br /> いま、N人のグループが都市1におり、全員都市6まで移動したいです。全員が都市<br /> 6に到着するまでに最短で何分かかるでしょうか?<br /> なお、乗り継ぎにかかる時間を考える必要はありません。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>詰まるポイントのA1>A2はA1/A2の切り上げ分時間がかかる。</li> <li>Forループでそれぞれの時間を計算して追加する。</li> </ul> <blockquote> <p>🐍これでいけんちゃうかな?入力のところは改善できるはず。</p> </blockquote> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">import math L=[int(input()) for i in range(6)] Step=0 min=L[0] for i in range(5): if min > L[i+1]: Step=Step+math.ceil(min/L[i+1]) min=L[i+1] else: Step=Step+1 print(Step) </code></pre> <blockquote> <p>🐍これならループも5回やしTLEにはならへんやろ。。</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>WA!!</p> <blockquote> <p>🐍WA!!</p> </blockquote> <h2 id="解説読む"><a href="#%E8%A7%A3%E8%AA%AC%E8%AA%AD%E3%82%80">解説読む</a></h2> <blockquote> <p>最も通りにくい、つまり容量が最も小さい交通機関を考えます。直感的には、最短時間で移動する場合でも、1 分でたどり着けるのは 𝑋 人 (交通機関の容量の最小を 𝑋 とする) になります。これは、「1秒に 15 L のペースで水を送れるポンプと、1 秒に 12 L のペースで水を送れるポンプをつなげたときに、1 秒に送れる水の量は小さい方を取って 12 L」 になるのと同じ原理です。つまり、先ほどの貪欲的な方法ではなくて、1 分に 𝑋 人ずつ 1 つ先に進めてやっても、直感的には<br /> かかる時間は変わらなさそうです。また、移動時間は 「(𝑁 ÷ 𝑋 を切り上げた値) + 4 分」 と、簡単に計算できるようになります。</p> <p>🐍WA!!</p> </blockquote> <h2 id="解説を読んで実装したコード"><a href="#%E8%A7%A3%E8%AA%AC%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">解説を読んで実装したコード</a></h2> <pre><code class="python">import math N=int(input()) L=[int(input()) for i in range(5)] m=math.ceil(N/min(L)) print(m+4) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC!!</p> <blockquote> <p>🐍でけたで!</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15102 2019-06-13T08:22:34+09:00 2019-06-13T08:22:34+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-063b-Python AtCoder Beginner Contest 063bをPythonで解く <h1 id="AtCoder Beginner Contest 063bをPythonで解く"><a href="#AtCoder+Beginner+Contest+063b%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 063bをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc063_b">AtCoder Beginner Contest 063b</a>を解いていきたいと思います。</p> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <blockquote> <p>英小文字からなる文字列Sが与えられます。Sに含まれる文字がすべて異なるか判定してください。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li><code>set()</code>に変換し長さを取得</li> <li><code>len(S)</code>と<code>set(len(S))</code>を比較し同じであればYes、そうでなければNo</li> </ul> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">S=input() if len(set(S))==len(S): print("yes") else: print("no") </code></pre> <blockquote> <p>🐍これでいけんちゃうかな?</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC!!</p> <blockquote> <p>🐍おし!</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python"><br />a=input();print(['no','yes'][len(a)==len(set(a))]) </code></pre> <blockquote> <p>🐍<code>print([][])</code>みたいなので条件かけるんや</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15101 2019-06-13T08:03:00+09:00 2019-06-13T08:03:00+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-122c-Python AtCoder Beginner Contest 122cをPythonで解く <h1 id="GeT AC"><a href="#GeT+AC">GeT AC</a></h1> <ol> <li><a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc122/tasks/abc122_c">GeT AC</a></li> </ol> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <blockquote> <p>A, C, G, T からなる長さNの文字列 Sが与えられます。以下の Q個の問いに答えてください。問 i (1≤i≤Q): 整数 li,ri (1≤li<br /> Sの先頭から li 文字目から ri 文字目までの (両端含む) 部分文字列を考える。この文字列に AC は部分文字列として何回現れるか。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li><code>count</code>でACの数を計算して出力する。</li> </ul> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">N,Q=map(int,input().split()) S=input() for q in range(Q): l,r=map(int,input().split()) s=S[l-1:r] print(s.count("AC")) </code></pre> <blockquote> <p>🐍これでいけんちゃうかな?</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>TLE</p> <blockquote> <p>🐍計算量の問題か</p> </blockquote> <h2 id="Atcoderの標準回答"><a href="#Atcoder%E3%81%AE%E6%A8%99%E6%BA%96%E5%9B%9E%E7%AD%94">Atcoderの標準回答</a></h2> <pre><code class="python">N,Q=map(int,input().split()) S=input() t = [0] * (N + 1) for i in range(N): t[i + 1] = t[i] + (1 if S[i : i + 2] == 'AC' else 0) for q in range(Q): l,r=map(int,input().split()) print(t[r-1] - t[l-1]) </code></pre> <blockquote> <p>🐍ACのカウントの配列をつくるんやな。</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC</p> <blockquote> <p>🐍文字列検索って結構時間喰うねんな。。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15097 2019-06-12T11:27:17+09:00 2019-06-12T11:27:17+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-129D-Python AtCoder Beginner Contest 129DをPythonで解く <h1 id="AtCoder Beginner Contest 129DをPythonで解く"><a href="#AtCoder+Beginner+Contest+129D%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 129DをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc129/tasks/abc129_d">AtCoder Beginner Contest 129D</a><br /> を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>縦H行横W列のグリッドが与えられます。このグリッドのうち、いくつかのマスには障害物が存在します。すぬけ君は、障害物のないマスのうち一つを選び、そのマスに明かりを設置しようとしています。 設置されたマスから、上下左右の四方向にまっすぐに光線が伸びます。それぞれの方向について、最初に障害物が存在するマスにぶつかる、もしくはグリッドの端にぶつかる手前のマスまで照らされます。明かりを設置したマスも照らされますが、障害物が存在するマスは照らされません。<br /> すぬけ君は明かりによって照らされるマスの個数を最大化したいです。<br /> H個の長さWの文字列 Si(1≤i≤H)が与えられます。Siの j文字目 (1≤j≤W) が # のとき、グリッドの上からi行目で左からj列目のマスには障害物があり、 . のときは障害物がありません。<br /> 照らされるマスの個数の最大値を求めてください。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>numpyを使う</li> <li>二次元配列に<code>[h,w]</code>を入力する空の配列を作る。</li> <li>マス目毎に上、下、右、左を確認するコードを作成し、h,wに格納する。</li> <li><code>max()</code>で出力</li> </ul> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">L=[list(input() )for i in range(H)] L = np.array(L) print(L) M=[] for h in range(H): for w in range(W): if L[h][w]=="#": M.append([0,0]) else: R=1 for r in range(W-w-1): if L[h][w+r+1]==".": R=R+1 else: break for r in range(w-1): if L[h][w-r-1]=="." and w-r-1>=0: R=R+1 else: break M.append(R) print(M) </code></pre> <blockquote> <p>🐍ここまで書いたけど知識不足で書けない。。</p> </blockquote> <h2 id="コードを読んでみる"><a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A7%E3%81%BF%E3%82%8B">コードを読んでみる</a></h2> <pre><code class="python">from numpy import* h,*s=open(0) h,w=int64(h.split()) r=range s=array([list(t[:-1])for t in s]) a,b,c,d=eval('zeros((h,w),"i"),'*4) for i in r(w): a[:,i]=-~a[:,i-1]*(s[:,i]>'#') b[:,~i]=-~b[:,-i]*(s[:,~i]>'#') for i in r(h): c[i,:]=-~c[i-1,:]*(s[i,:]>'#') d[~i,:]=-~d[-i,:]*(s[~i,:]>'#') print(int((a+b+c+d).max())-3) </code></pre> <h3 id="3行目まで"><a href="#3%E8%A1%8C%E7%9B%AE%E3%81%BE%E3%81%A7">3行目まで</a></h3> <pre><code class="python">h,*s=open(0) print(h) print(s) h,w=int64(h.split()) print(h) print(w) </code></pre> <blockquote> <p>🐍とりあえず出力確認や</p> </blockquote> <pre><code class="python">4 6 ['#..#..\n', '.....#\n', '....#.\n', '#.#...'] 4 6 </code></pre> <blockquote> <p>🐍なるほど</p> </blockquote> <pre><code class="python">r=range </code></pre> <blockquote> <p>🐍なるほど後で<code>for i in range()</code>が何度か出てくるからここで定義してるねんな。</p> </blockquote> <pre><code class="python">s=array([list(t[:-1])for t in s]) </code></pre> <blockquote> <p>🐍numpyのarrayに変換してるねんな。なんで<code>[list(t[:-1])</code>なんやろ?</p> </blockquote> <pre><code class="python">[['#', '.', '.', '#', '.', '.'] ['.', '.', '.', '.', '.', '#'] ['.', '.', '.', '.', '#', '.'] ['#', '.', '#', '.', '.']] ['#..#..\n' '.....#\n' '....#.\n' '#.#...'] </code></pre> <blockquote> <p>🐍1次元配列なるし、改行も含まれてまうねんな。</p> </blockquote> <pre><code class="python">a,b,c,d=eval('zeros((h,w),"i"),'*4) </code></pre> <blockquote> <p>🐍 eval は第1引数を式として評価してるから<code>'zeros((h,w),"i"),'</code>までが今回は引数。zerosは、0で初期化されたndarrayを生成する関数やな。abcdで4つ生成してるねんな。</p> </blockquote> <pre><code class="python">for i in r(w): a[:,i]=-~a[:,i-1]*(s[:,i]>'#') b[:,~i]=-~b[:,-i]*(s[:,~i]>'#') </code></pre> <pre><code>Traceback (most recent call last): File "./Main.py", line 8, in <module> a[:,i]=-~a[:,i-1]*(s[:,i]>'#') IndexError: too many indices </code></pre> <blockquote> <p>🐍 ACしてるのにエラーでるな。このコードの読コードはここまでや。</p> </blockquote> <h3 id="参考にしたコード"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">参考にしたコード</a></h3> <pre><code class="python">import numpy as np H,W=map(int,input().split()) S=[list(input()) for h in range(H)] S=[[1 if s=='.' else 0 for s in S[h]] for h in range(H)] S=np.array(S) L=S.copy() R=S.copy() U=S.copy() D=S.copy() for w in range(1,W): L[:,w]=(L[:,w-1]+1)*S[:,w] R[:,-(1+w)]=(R[:,-w]+1)*S[:,-(1+w)] for h in range(1,H): U[h,:]=(U[h-1,:]+1)*S[h,:] D[-(1+h),:]=(D[-h,:]+1)*S[-(1+h),:] print(int((L+R+U+D).max())-3) </code></pre> <pre><code class="python">S=[[1 if s=='.' else 0 for s in S[h]] for h in range(H)] [[0, 1, 1, 0, 1, 1], [1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 0, 1], [0, 1, 0, 1, 1, 1]] </code></pre> <blockquote> <p>🐍 ここは文字列を0と1に置き換えてるんやな。</p> </blockquote> <pre><code class="python">L[:,w]=(L[:,w-1]+1)*S[:,w] </code></pre> <blockquote> <p>🐍 <code>,</code>ってなんや外したろ</p> </blockquote> <pre><code class="python">Traceback (most recent call last): File "./Main.py", line 12, in <module> L[:w]=(L[:w-1]+1)*S[:w] ValueError: could not broadcast input array from shape (0,6) into shape (1,6) </code></pre> <blockquote> <p>🐍多次元の場合は、カンマ(,)で区切ってそれぞれを指定せなあかんねんな。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15096 2019-06-12T08:28:48+09:00 2019-06-12T08:28:48+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-090B-Python AtCoder Beginner Contest 090BをPythonで解く <h1 id="AtCoder Beginner Contest 090BをPythonで解く"><a href="#AtCoder+Beginner+Contest+090B%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 090BをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc090_b">AtCoder Beginner Contest 090B</a>を解いていきたいと思います。</p> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <blockquote> <p>A以上B以下の整数のうち、回文数となるものの個数を求めてください。 ただし、回文数とは、先頭に0をつけない10進表記を文字列として見たとき、前から読んでも後ろから読んでも同じ文字列となるような正の整数のことを指します。</p> </blockquote> <h2 id="考え方"><a href="#%E8%80%83%E3%81%88%E6%96%B9">考え方</a></h2> <ul> <li>文字列で入力をうけて</li> <li>[-1::-1]で逆の文字列を作成</li> <li><code>if</code>文で逆の文字列と入力の文字列が同じならカウントを1追加</li> </ul> <h2 id="実際書いたコード"><a href="#%E5%AE%9F%E9%9A%9B%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実際書いたコード</a></h2> <pre><code class="python">A,B=map(int,input().split()) n=0 for i in range(A,B): C=(str(i)[-1::-1]) if int(C)==i: n=n+1 print(n) </code></pre> <blockquote> <p>🐍これでいけそう</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>WA</p> <blockquote> <p>🐍あっ、rangeは<code>B+1</code>にしなあかん。</p> </blockquote> <h2 id="修正したコード"><a href="#%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">修正したコード</a></h2> <pre><code class="python">A,B=map(int,input().split()) n=0 for i in range(A,B+1): C=(str(i)[-1::-1]) if int(C)==i: n=n+1 print(n) </code></pre> <blockquote> <p>🐍これでいけそう</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC</p> <blockquote> <p>🐍ケアレスミスや</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">a,b=map(int,input().split()) print(len([i for i in map(str,range(a,b+1)) if i==i[::-1]])) </code></pre> <blockquote> <p>🐍 <code>map(str,)</code>を<code>range</code>につかえるんや。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15095 2019-06-12T07:53:01+09:00 2019-06-12T07:53:01+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-044A-Python AtCoder Beginner Contest 044AをPythonで解く <h1 id="AtCoder Beginner Contest 044AをPythonで解く"><a href="#AtCoder+Beginner+Contest+044A%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 044AをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc044_a">AtCoder Beginner Contest 044A</a>を解いていきたいと思います。</p> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <blockquote> <p>1軒のホテルがあります。 このホテルの宿泊費は、次のようになっています。<br /> 最初のK泊までは、1泊あたり X円K+1泊目以降は、1泊あたり Y円高橋君は、このホテルにN泊連続で宿泊することにしました。 高橋君の宿泊費は合計で何円になるか求めてください。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li><code>N<=K</code>で<code>if</code>分岐させて出力を分ける。</li> <li><code>if N<=K:</code>は<code>print(X*N)</code></li> <li><code>else:</code>は<code>print(X*K+Y*(N-K))</code></li> </ul> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">N=int(input()) K=int(input()) X=int(input()) Y=int(input()) if N<=K: print(X*N) else: print(X*K+Y*(N-K)) </code></pre> <blockquote> <p>🐍これでいけんちゃうかな?入力のところは改善できるはず。</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC!!</p> <blockquote> <p>🐍おし!</p> </blockquote> <h2 id="入力を改善したコード"><a href="#%E5%85%A5%E5%8A%9B%E3%82%92%E6%94%B9%E5%96%84%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">入力を改善したコード</a></h2> <pre><code class="python">n,k,x,y=[int(input()) for i in [0]*4] print(n*x-(x-y)*max([n-k,0])) </code></pre> <blockquote> <p>🐍リスト内包表記便利や</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15091 2019-06-11T14:00:20+09:00 2019-06-11T14:00:20+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-087C-Python AtCoder Beginner Contest 087CをPythonで解く <h1 id="AtCoder Beginner Contest 087CをPythonで解く"><a href="#AtCoder+Beginner+Contest+087C%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 087CをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc087_c">AtCoder Beginner Contest 087C</a>を解いていきたいと思います。</p> <h2 id=" 問題"><a href="#%E3%80%80%E5%95%8F%E9%A1%8C"> 問題</a></h2> <blockquote> <p>2×Nのマス目があります。上からi行目、左からj列目 (1≤i≤2, 1≤j≤N) のマスをマス(i,j)と表すことにします。あなたははじめ、左上のマス(1,1)にいます。<br /> あなたは、右方向または下方向への移動を繰り返し、右下のマス(2,N)に移動しようとしています。マス(i,j)にはAi,j個のアメが置かれています。<br /> あなたは移動中に通ったマスに置いてあるアメをすべて回収します。 左上および右下のマスにもアメが置かれており、あなたはこれらのマスに置かれているアメも回収します。<br /> 移動方法をうまく選んだとき、最大で何個のアメを回収できるでしょうか。</p> </blockquote> <h2 id="こう考えた。"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F%E3%80%82">こう考えた。</a></h2> <ul> <li>入力を<code>N,L1,L2"</code>でそれぞれ受ける。</li> <li><code>for</code>で全組み合わせを列挙し回答の配列に格納する。</li> <li><code>print</code>で表示する。</li> </ul> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">N=int(input()) L1=list(map(int,input().split())) L2=list(map(int,input().split())) C=[] for n in range(N): C.append(sum(L1[:n+1])+sum(L2[n:])) print(max(C)) </code></pre> <blockquote> <p>🐍これでいけんちゃうかな?</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC!!</p> <blockquote> <p>🐍おし!</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">n=int(input()) a=list(map(int,input().split())) b=list(map(int,input().split())) print(max(sum(a[:i+1])+sum(b[i:]) for i in range(n))) </code></pre> <blockquote> <p>🐍リスト内に<code>for</code>かけるんや。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15089 2019-06-11T08:13:15+09:00 2019-06-11T08:13:15+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-088B-Python AtCoder Beginner Contest 088BをPythonで解く <h1 id="AtCoder Beginner Contest 088BをPythonで解く"><a href="#AtCoder+Beginner+Contest+088B%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 088BをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc088_b">AtCoder Beginner Contest 088B</a>を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>N枚のカードがあります. i枚目のカードには, aiという数が書かれています.<br /> Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.<br /> 2 人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2 人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>リストで標準入力を取得</li> <li>ターンを<code>%2</code>表現してAliceとBobの番を表現</li> <li><code>(max)</code>を使い最大値を取得しAliceまたはBobに加算</li> <li><code>remove</code>を用いて配列から最大値を除去</li> </ul> <h2 id="実際書いたコード"><a href="#%E5%AE%9F%E9%9A%9B%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実際書いたコード</a></h2> <pre><code class="python">N=int(input()) A=list(map(int,input().split())) Alice=0 Bob=0 n=1 while n<=N: if n%2==1: Alice=Alice+max(A) A.remove(max(A)) n=n+1 else: Bob=Bob+max(A) A.remove(max(A)) n=n+1 print(Alice-Bob) </code></pre> <blockquote> <p>🐍やや冗長やけど書くとこんな感じになった。</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC!</p> <blockquote> <p>🐍やったで。</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">N = int(input()) a = sorted(list(map(int, input().split())), reverse=True) alice = sum(a[0::2]) bob = sum(a[1::2]) print(abs(alice - bob)) </code></pre> <blockquote> <p>🐍 <code>reverse=True</code>で配列を逆にして、リストの<code>step</code>を<code>2</code>にして<code>sum()</code>で合計値を出しているんやな。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15088 2019-06-11T08:03:29+09:00 2019-06-11T08:03:29+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-095C-Python AtCoder Beginner Contest 095CをPythonで解く <h1 id="AtCoder Beginner Contest 095CをPythonで解く"><a href="#AtCoder+Beginner+Contest+095C%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 095CをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc095_c">AtCoder Beginner Contest 095C</a>を解いていきたいと思います。</p> <h2 id="問題"><a href="#%E5%95%8F%E9%A1%8C">問題</a></h2> <p>ファーストフードチェーン「ピザアット」のメニューは「Aピザ」「Bピザ」「ABピザ」の3種類です。AピザとBピザはまったく異なるピザで、これらをそれぞれ半分に切って組み合わせたものがABピザです。AピザBピザ、ABピザ1枚あたりの値段はそれぞれA円、B円、C円です。</p> <p>中橋くんは、今夜のパーティーのためにAピザX枚とBピザY枚を用意する必要があります。これらのピザを入手する方法は、AピザやBピザを直接買うかABピザ2枚を買ってAピザ1枚とBピザ1枚に組み替える以外にはありません。このためには最小で何円が必要でしょうか?なお、ピザの組み替えにより、必要な量を超えたピザが発生しても構いません。</p> <h2 id="考えたこと"><a href="#%E8%80%83%E3%81%88%E3%81%9F%E3%81%93%E3%81%A8">考えたこと</a></h2> <ul> <li>Cピザが、AピザとBピザの値段両方より高ければ<code>A*X+B*Y</code>が最安値。</li> <li>Cピザが、AピザとBピザの両ピザより安ければ<code>C*max(X,Y)*2</code>が最安値。</li> <li>Cピザが、AピザかBピザどちらかの1つのピザより安く、かつ安いピザが枚数の多い方ならば<code>C*min(X,Y)*2+min(A,B)*abs(X-Y))</code></li> <li>Cピザが、AピザかBピザどちらかの1つのピザより安く、かつ高いピザが枚数の多い方ならば<code>C*max(X,Y)*2</code></li> </ul> <blockquote> <p>🐍これでいけそう。</p> </blockquote> <h2 id="実装したコード"><a href="#%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実装したコード</a></h2> <pre><code class="python">A,B,C,X,Y=map(int,input().split()) print(min(A*X+B*Y,C*max(X,Y)*2,C*min(X,Y)*2+min(A,B)*abs(X-Y))) </code></pre> <blockquote> <p>🐍C問題が2行で書けたのは少し嬉しい。</p> </blockquote> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>WA</p> <blockquote> <p>🐍なんでや!</p> </blockquote> <h2 id="正解のコード"><a href="#%E6%AD%A3%E8%A7%A3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89">正解のコード</a></h2> <pre><code class="python">A,B,C,X,Y = map(int,input().split()) print(min(X*A+Y*B,X*2*C+B*max(0,Y-X),Y*2*C+A*max(0,X-Y))) </code></pre> <blockquote> <p>🐍 <code>X*2*C+B*max(0,Y-X)</code>と<code>Y*2*C+A*max(0,X-Y)</code>で分岐しているねんな。</p> </blockquote> <h2 id="ifで書くとややこしい"><a href="#if%E3%81%A7%E6%9B%B8%E3%81%8F%E3%81%A8%E3%82%84%E3%82%84%E3%81%93%E3%81%97%E3%81%84">ifで書くとややこしい</a></h2> <pre><code class="python">a, b, c, x, y = [int(i) for i in input().split()] if c < a/2 and c < b/2: cost = max(x, y)*2*c elif c < a/2: if x < y: cost = x*2*c + (y-x)*b else: cost = x*2*c elif c < b/2: if y < x: cost = y*2*c + (x-y)*a else: cost = y*2*c elif c < (a+b)/2: cost = min(x, y)*2*c+(x-min(x,y))*a + (y-min(x,y))*b else: cost = x*a+y*b print(cost) </code></pre> <blockquote> <p>🐍 あかん。書いてて頭破裂しそうになった。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15084 2019-06-10T13:04:01+09:00 2019-06-10T13:04:01+09:00 https://crieit.net/posts/AtCoder-Beginner-Contest-073C-Python AtCoder Beginner Contest 073CをPythonで解く <h1 id="AtCoder Beginner Contest 073CをPythonで解く"><a href="#AtCoder+Beginner+Contest+073C%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 073CをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc073/tasks/abc073_c">AtCoder Beginner Contest 073C</a>を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>あなたは、joisinoお姉ちゃんと以下のようなゲームをしています。<br /> 最初、何も書いていない紙がある。<br /> joisinoお姉ちゃんが一つの数字を言うので、その数字が紙に書いてあれば紙からその数字を消し、書いていなければその数字を紙に書く。これをN回繰り返す。<br /> その後、紙に書かれている数字がいくつあるかを答える。<br /> joisinoお姉ちゃんが言った数字が、言った順番に A1,...,AN として与えられるので、ゲーム終了後に紙に書かれている数字がいくつあるか答えてください。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>空の配列<code>L</code>を作成</li> <li><code>for</code>で配列Lに要素が無ければ<code>append</code></li> <li><code>for</code>で配列Lに要素があれば<code>remove</code></li> <li><code>len(L)</code>で答えを出力</li> </ul> <blockquote> <p>🐍<code>for</code>1つしか使ってないイケてるコードが書けそうや</p> </blockquote> <h2 id="実際書いたコード"><a href="#%E5%AE%9F%E9%9A%9B%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実際書いたコード</a></h2> <pre><code class="python">N=int(input()) L=[] for i in range(N): A=int(input()) if A in L: L.remove(A) else: L.append(A) print(len(L)) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>TLE</p> <blockquote> <p>🐍<code>for</code>1つしか使ってないのになんでや!</p> </blockquote> <h2 id="解説を元に考え直す。"><a href="#%E8%A7%A3%E8%AA%AC%E3%82%92%E5%85%83%E3%81%AB%E8%80%83%E3%81%88%E7%9B%B4%E3%81%99%E3%80%82">解説を元に考え直す。</a></h2> <p>Aをソートすると、同じ数が隣り合うように並べ替えられる。</p> <p>これを左か順にみていくと、奇数回登場する数が何種類あるかを数えることができる。</p> <blockquote> <p>🐍実装してみよ。</p> </blockquote> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">N=int(input()) L=[] for i in range(N): L.append(int(input())) ans=0 for i in set(L): if L.count(i)%2==1: ans=ans+1 print(ans) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>TLE</p> <blockquote> <p>🐍まじかよ。。</p> </blockquote> <h2 id="ListからSetに変えてみる"><a href="#List%E3%81%8B%E3%82%89Set%E3%81%AB%E5%A4%89%E3%81%88%E3%81%A6%E3%81%BF%E3%82%8B">ListからSetに変えてみる</a></h2> <blockquote> <p>🐍<code>set</code>早いってまじかよ。。</p> </blockquote> <h2 id="書いたコード"><a href="#%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">書いたコード</a></h2> <pre><code class="python">n = int(input()) s = set() for i in range(n): a = input() if a in s: s.remove(a) else: s.add(a) print(len(s)) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>AC</p> <blockquote> <p>🐍まじかよ。。</p> <p>🐍<code>set()</code>は<code>List()</code>より早い。覚えた。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15083 2019-06-10T11:33:42+09:00 2019-06-10T11:33:42+09:00 https://crieit.net/posts/Python-ABC129C Pythonで競プロ|ABC129C| <h1 id="AtCoder Beginner Contest 129CをPythonで解く"><a href="#AtCoder+Beginner+Contest+129C%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 129CをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc129/tasks/abc129_c">AtCoder Beginner Contest 129C</a><br /> を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>N段の階段があります。高橋君は現在、上り口(0段目)にいます。 高橋君は一歩で 1段か 2段上ることができます。ただし、a1,a2,a3,...aM段目の床は壊れており、その段に足を踏み入れることは危険です。</p> </blockquote> <p>壊れている床を踏まないようにしながら、最上段(N段目)にたどりつくまでの移動方法は何通りあるでしょうか? 総数を1,000,000,007で割った余りを求めてください。</p> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>数字が連続した場合は移動方法がなくなり0になる。</li> <li>a1段目までの登り方×a1からa2段目までの登り方×...となる。</li> </ul> <h2 id="実装したコード"><a href="#%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実装したコード</a></h2> <pre><code class="python">N,M=map(int,input().split()) A=[] for i in range(M): a=int(input()) A.append(a) print(A) ##連続していないかチェック if M>1: for i in range(M-1): if A[i]+1==A[i+1]: print("No") break step=0 for a in A: B=a-1-step for b in range(B): </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>ここで時間切れでした。</p> <blockquote> <p>🐍なんでや!!</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">N, M = list(map(int,input().split())) b = [0]*(N+2) b[0] = 1 for i in range(M): b[int(input())] = -1 for i in range(N): if b[i] != -1: if b[i+1] != -1: b[i+1] += b[i] if b[i+2] != -1: b[i+2] += b[i] print(b[N]%1000000007) # 入力は以下で行う # 6 1 # 3 </code></pre> <h3 id="出力を見ていく"><a href="#%E5%87%BA%E5%8A%9B%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%84%E3%81%8F">出力を見ていく</a></h3> <pre><code class="python">N, M = list(map(int,input().split())) b = [0]*(N+2) b[0] = 1 print(b) # [1, 0, 0, 0, 0, 0, 0, 0] </code></pre> <pre><code class="python">N, M = list(map(int,input().split())) b = [0]*(N+2) b[0] = 1 for i in range(M): b[int(input())] = -1 print(b) # [1, 0, 0, -1, 0, 0, 0, 0] </code></pre> <pre><code class="python">N, M = list(map(int,input().split())) b = [0]*(N+2) b[0] = 1 for i in range(M): b[int(input())] = -1 for i in range(N): if b[i] != -1: # b[i]が-1でないなら以下の2つの処理を行う if b[i+1] != -1: b[i+1] += b[i] if b[i+2] != -1: b[i+2] += b[i] #[1, 1, 0, -1, 0, 0, 0, 0] #[1, 1, 1, -1, 0, 0, 0, 0] #[1, 1, 2, -1, 0, 0, 0, 0] #[1, 1, 2, -1, 2, 0, 0, 0] #[1, 1, 2, -1, 2, 2, 0, 0] #[1, 1, 2, -1, 2, 2, 2, 0] #[1, 1, 2, -1, 2, 2, 4, 0] #[1, 1, 2, -1, 2, 2, 4, 2] </code></pre> <p>1回目のループは<code>b[0]=1</code>です。<br /> + <code>b[1]=0</code>ですので<code>b[1]</code>に<code>b[0]+b[1]</code>で1が入ります。<br /> + <code>b[2]=0</code>ですので<code>b[2]</code>に<code>b[2]+b[0]</code>で1が入ります。<br /> 2回目のループは<code>b[1]=1</code>から始まります。<br /> + <code>b[2]=1</code>ですので<code>b[2]</code>に<code>b[2]+b[1]</code>で2が入ります。<br /> + <code>b[3]=-1</code>ですので<code>b[3]</code>に対して何も行いません。<br /> 3回目のループは<code>b[2]=2</code>から始まります。<br /> + <code>b[3]=-1</code>ですので何も行いません。<br /> + <code>b[4]=0</code>ですので<code>b[2]+b[4]</code>で2が入ります。<br /> 4回目のループは<code>b[3]=-1</code>から始まります。<br /> + <code>b[3]=-1</code>ですので何も行いません。<br /> 5回目のループは<code>b[4]=2</code>から始まります。<br /> + <code>b[5]</code>に2が入ります。<br /> + <code>b[6]</code>に2が入ります。<br /> 6回目のループは<code>b[5]=2</code>から始まります。<br /> + <code>b[6]</code>に4が入ります。<br /> + <code>b[7]</code>に2が入ります。</p> <p>これで得た配列の後ろから2番目を表示すれば正解です。</p> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">N,M = map(int, input().split()) As = [1] *( N+1) for _ in range(M): i = int(input()) As[i] = 0 for i in range(N-1): if As[i+2] > 0: As[i+2] = As[i+1] + As[i] mod = 10**9+7 print(As[-1]%mod) </code></pre> <h3 id="コードを読む"><a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%AA%AD%E3%82%80">コードを読む</a></h3> <pre><code class="python">As = [1] *( N+1) for _ in range(M): i = int(input()) As[i] = 0 </code></pre> <p>ここで階段を[1,1,1,1,0]という形で表現する。</p> <pre><code class="python"> if As[i+2] > 0: As[i+2] = As[i+1] + As[i] </code></pre> <p>2段先が0で無ければ、2段先に1段先と現在の段の数値を足したものを代入する。</p> <blockquote> <p>🐍ポイントは3段先を読むという形に問題文を小分けにすることやったんやな。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15082 2019-06-10T08:46:29+09:00 2019-06-10T08:46:29+09:00 https://crieit.net/posts/Python-ABC129B Pythonで競プロ|ABC129B| <h1 id="AtCoder Beginner Contest 129BをPythonで解く"><a href="#AtCoder+Beginner+Contest+129B%E3%82%92Python%E3%81%A7%E8%A7%A3%E3%81%8F">AtCoder Beginner Contest 129BをPythonで解く</a></h1> <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc129/tasks/abc129_b">AtCoder Beginner Contest 129B</a><br /> を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>1から Nの番号がついた N個の重りがあり、番号 iの重りの重さは Wiです。<br /> ある整数 1≤T<br /> このような分け方全てを考えた時、S1と S2の差の絶対値の最小値を求めてください。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>S1とS2の合計は、おもりの全ての和<code>sum()</code>になる。</li> <li><code>sum()-S1=S2</code>が成り立つ。</li> <li>全検索してリストに格納し<code>min()</code>を用いて出力する。</li> </ul> <h2 id="実装したコード"><a href="#%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実装したコード</a></h2> <pre><code class="python">N=int(input()) W=list(map(int,input().split())) L=[] for i in W: A=sum(W[:i]) B=sum(W)-sum(W[:i]) L.append(abs(A-B)) print(min(L)) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p><code>WA</code>でした。</p> <blockquote> <p>🐍なんでや!!</p> <p>🐶落ち着け。Wでなんでforを回してるねん。順番ずれるし番号めちゃくちゃや。</p> <p>🐍!!</p> </blockquote> <h2 id="冷静になりACしたコード"><a href="#%E5%86%B7%E9%9D%99%E3%81%AB%E3%81%AA%E3%82%8AAC%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">冷静になりACしたコード</a></h2> <pre><code class="python">N=int(input()) W=list(map(int,input().split())) L=[] for i in range(N): A=sum(W[:i]) B=sum(W)-sum(W[:i]) L.append(abs(A-B)) print(min(L)) </code></pre> <blockquote> <p>🐍ACしたで!</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">n,*w=map(int,open(0).read().split());print(min(abs(sum(w[:i])-sum(w[i:]))for i in range(n))) </code></pre> <blockquote> <p>🐍1行で書けるの?<br /> 🐶<code>;</code>で分割されてるで</p> </blockquote> <ul> <li><p><code>n,*w=map(int,open(0).read().split())</code>ですべての入力を受けてます</p></li> <li><p><code>n</code>と<code>w</code>にそれぞれ格納されます。</p></li> <li><p><code>min(abs(sum(w[:i])-sum(w[i:]))for i in range(n)</code>で</p></li> <li><p><code>abs(sum(w[:i])-sum(w[i:])))</code>で絶対値をとりにいき<code>for</code>でリストに格納します</p></li> </ul> <blockquote> <p>🐍<code>open(0).read().split()</code>は便利そう。</p> </blockquote> aocory tag:crieit.net,2005:PublicArticle/15081 2019-06-10T07:45:51+09:00 2019-06-10T07:45:51+09:00 https://crieit.net/posts/Python-ABC129A Pythonで競プロ|ABC129A| <p>今回は、<a target="_blank" rel="nofollow noopener" href="https://atcoder.jp/contests/abc129/tasks/abc129_a">AtCoder Beginner Contest 129A</a><br /> を解いていきたいと思います。</p> <h2 id="問題文"><a href="#%E5%95%8F%E9%A1%8C%E6%96%87">問題文</a></h2> <blockquote> <p>空港 A, B, C があり、それぞれの空港の間では、双方向に飛行機が運航しています。<br /> 空港 A, B 間の飛行時間は片道P時間、空港 B, C 間の飛行時間は片道Q時間、空港 C, A 間の飛行時間は、片道 R時間です。<br /> いずれかの空港からスタートして他の空港に飛行機で移動し、さらにそのどちらでもない空港に飛行機で移動するような経路を考えます。<br /> 飛行時間の和は最短で何時間になるでしょうか。</p> </blockquote> <h2 id="こう考えた"><a href="#%E3%81%93%E3%81%86%E8%80%83%E3%81%88%E3%81%9F">こう考えた</a></h2> <ul> <li>P、Q、Rをから2つを選択しそれぞれを加算する。</li> <li>それらをリストに格納し<code>min()</code>で出力する。</li> </ul> <h2 id="実装したコード"><a href="#%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">実装したコード</a></h2> <pre><code class="python">P,Q,R=map(int,input().split()) print(min(P+Q,Q+R,P+R)) </code></pre> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p><code>AC</code>でした。</p> <blockquote> <p>🐍やったで!</p> </blockquote> <h2 id="勉強になったコード"><a href="#%E5%8B%89%E5%BC%B7%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89">勉強になったコード</a></h2> <pre><code class="python">print(sum(sorted(map(int,input().split()))[:2])) </code></pre> <ul> <li><p><code>map(int,input().split()</code>ですべての入力を受けて</p></li> <li><p><code>sorted()</code>で小さい順番に並べ替えます。</p></li> <li><p><code>[:2]</code>で小さい順番から2つを引っ張ってきて</p></li> <li><p><code>sum()</code>で合計をだして<code>print()</code>で出力します。</p></li> </ul> <h2 id="sort()とsorted()の違い"><a href="#sort%28%29%E3%81%A8sorted%28%29%E3%81%AE%E9%81%95%E3%81%84">sort()とsorted()の違い</a></h2> <ul> <li>リスト型のメソッドsort(): 元のリストをソート</li> <li>組み込み関数sorted(): ソートした新たなリストを生成</li> </ul> <blockquote> <p>🐍いきなり<code>sorted</code>で並び替える発想無かった。</p> </blockquote> aocory