3問目は撃墜されました.弱いコードでした.66位でした.
1問目 No.191 供託金
問題
回答
ぼく「平均より小さければ30万」
ち が い ま す
読み間違えていました.1 / 10 以下ならでしたね.
こんなんで何度も出し直してたら時間がもったいないです.ダメダメ.
そこ直したらAC.
読み込んだものをリストにして,for文で回してチェック,これだけでOKではないでしょうか.
N = int(input()) moneys = list(map(int, input().split())) th = sum(moneys) / 10 res = 0 for i in range(N): res += 30 if th >= moneys[i] else 0 print(res)
2問目 No.192 合成数
問題
回答
解説聞いてましたけど,これ偶数だったらそのまま出力,そうでなければ1足して出力でいいみたいですね.
ぼくはアホなので,てきとうに5の倍数に揃えました.(5の倍数が揃えやすいと思ったからですね.2の倍数でよかったわけですが)
それと問題文の理解に非常に時間がかかりました.はい.
print(int(input()) // 5 * 5)
3問目
問題
元の回答コード
#22521 No.193 筒の数式 - yukicoder
訂正版
#22728 No.193 筒の数式 - yukicoder
> この時、数式の最初や最後が演算子になってはいけない。
これはわかった
> leading zeroは認める。
これはよくわからない.
まあいいや → 大会後,チャレンジで見事に落とされる.
はい.ちなみに修正前のコードはこれ.
S = input() maxnum = -9999999999999999999999999 length = len(S) ckecknum = lambda x: not (x == "+" or x == "-") for i in range(length): line = S[i:length] + S[0:i] # frist and end check first = line[0] end = line[length - 1] if not ckecknum(first) or not ckecknum(end): line = "" continue try: maxnum = max(maxnum, eval(line)) except: pass print(maxnum)
具体的に言うと,こういうパターンがダメ.
01+011+011
元のコードだと多分一つも計算出来ないかららだめ.
leading zeroっていうのはあれです,例えば
011
は次のように解釈する.
11
ということです.
どうやらpython3のevalではleading zeroを認めていない模様.
evalの言語仕様よく知らなかったので,勉強になりました.
そして参加者すごすぎて怖いです.もっと強いコード描かなきゃ(白目)
一応,訂正後のコードならば通るのですが,かなり冗長になってしまったので,だめですね…
(エラーチェックとか多すぎると思う)
改善点として,leading zeroは正規表現でひっかけるのが良いと思う.
S = input() maxnum = -9999999999999999999999999 length = len(S) checknum = lambda x, line: not (line[x] == "+" or line[x] == "-") for i in range(length): line = S[i:length] + S[0:i] tline = line if not checknum(0, line) or not checknum(len(line) - 1, line): continue j = 0 while tline[j] == "0": j += 1 if not checknum(j, tline): tline = tline[j - 1:len(tline)] j = 1 while j < len(tline): if not checknum(j - 1, tline) and tline[j] == "0": if j == len(tline) - 1: break else: if checknum(j + 1, tline): tline = tline[0:j] + tline[j+1:len(tline)] else: j += 1 for i in range(len(tline) - 1): if not checknum(i, tline) and not checknum(i + 1, tline): line = "" break else: line = tline try: maxnum = max(maxnum, eval(line)) except: pass print(maxnum)
残りの問題はわかりませんでした.
フィボナッチの1問目は前半半分のテストケースは通したけど,後半はさっぱり.
他の人のコード見る限りでは,DPっぽいけどさっぱりわからん.
本当はこの後CodeForceの問題も見てみようかと思いましたが,どうやら登録が間に合わなかったようで,また今度になりそうです.
あと情報の登録なんですが,大学名とか都市名とか存在しなくて真顔.誰も参加してないのかな….
不安ですねえ.
あと言語モード切り替えてなかったので,最初ロシア語で困惑しました,英語にすぐ切り替えたけどw
yukicoderに関しては,★3~★4解けるようにならなきゃなと思います.
もっともっと問題を解いて,解法について調べて,みたいな作業を繰り返していかなきゃだめですね.
というわけで,今日はこれにておしまい.
追記
解説としてリンクされていたので,少し修正してみました.