Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21764

Pythonでパナソニックプログラミングコンテスト2020を解きたかった

$
0
0

はじめに

今回はA,Bしか解けませんでした。ABC相当のコンテストでAとBしか解けないのは良くない。

A問題

問題

考えたこと
問題に書いてある数列をコピーして、kでindexを指定してprintしました。

k=int(input())l=[1,1,1,2,1,2,1,5,2,2,1,5,1,2,1,14,1,5,1,5,2,2,1,15,2,2,5,4,1,4,1,51]print(l[k-1])

B問題

問題
1WA
考えたこと
問題文の図を見ると、i行目とi+1行目を足すとWになると思ったのでhの偶奇で判別して計算しようとしたら1WAしました。WAの理由は、W,Hが1のときを考慮していなかったためです。ですので、どちらかが1のときを場合分けして書きました。

importmathh,w=map(int,input().split())ifw==1orh==1:print(1)quit()ifh%2!=0:ans=w*(h-1)/2+math.ceil(w/2)print(int(ans))else:ans=w*h/2print(int(ans))

C問題

問題
12WA NoAC

考えたこと
やったー、数学の問題じゃんと思っていたら地獄を見ました。まずは、安直に全部sqrtにつっこんで計算して1WA付きたので、計算をうまく減らしてあげないといけないと思いました。ですので、紙とペンを用意して必死にゼロに近い数学力で計算していました。

\sqrt(a) + \sqrt(b) < \sqrt(c)は両辺は0以上なので、両辺を二乗して \\
= a + b < c 
= a + b - c + 2\sqrt(ab)< 0 が成り立てば\sqrt(a) + \sqrt(b) < \sqrt(c)を満たす \\

a + b - cは整数だから計算的にあふれないと思ったので、\\
2\sqrt(ab)をどうやって処理するかを考えました。\\
相加相乗平均の関係より、 \\
a + b >= 2 \sqrt(ab) \\
が成り立つ。等号成立条件はa = bなので、そのときはifで分ければいいと考えてました。 \\ 
問題は、a != bのときで、自分の力ではどうしても根号を消すことができませんでした。 \\

それで、うまく工夫したつもりでしたがWAは消えず...結局ACできませんでした。
コンテスト終了した後に他のACした人のコードを見るとDecimalとかいうモジュールを使って小数をうまく計算していました。こんなに楽に計算できたら、楽勝問題だったのに...

<追記>

fromdecimalimport*a,b,c=map(int,input().split())ifDecimal(a).sqrt()+Decimal(b).sqrt()<Decimal(c).sqrt():print("Yes")else:print("No")

でACでました。

まとめ

言語に対しての知識不足を再認識するコンテストでした。色々と悔しいし、悲しい。毎日AtCoderチャレンジをしているので、次回のコンテストこそは結果を残したいです。
では、おやすみなさい。


Viewing all articles
Browse latest Browse all 21764

Trending Articles