読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

今日の競プロその1(2015/04/19)

今日解いた分.
タグ付けの関係で2つの記事にわけておきます.

ARC 034 A

問題

A: 首席 - AtCoder Regular Contest 034 | AtCoder

回答

Submission #389392 - AtCoder Regular Contest 034 | AtCoder

for分ぐるぐる回しながら,最大のものを見つける.
二番目とか,三番目の人のデータがもし欲しければリストに入れて,ソート,そして出力だろうなあとか.

ARC 004 B

問題

B: 2点間距離の最大と最小 ( Maximum and Minimum ) - AtCoder Regular Contest #004 | AtCoder

回答

Submission #389409 - AtCoder Regular Contest #004 | AtCoder

最大値はすぐに合計値だと分かりましたが,最小値がわからず….
入出力の例などを元に調べると,どうやら最も長い辺と残りの辺の値を見て,やればうまくいくようだという事がわかり,例のデータとか入れてみると上手く言ったので,そのまま提出,AC.
言葉にするとわかりにくい気がするので,ソースコードを貼っておく.こんなかんじになった.

N = int(input())
table = [int(input()) for _ in range(N)]
sumtable = sum(table)
print(sumtable)
maxlength = max(table)
if (sumtable - maxlength) > maxlength:
    print(0)
else:
    print(maxlength - (sumtable - maxlength))
ARC 017 A

問題

A: 素数、コンテスト、素数 - AtCoder Regular Contest #017 | AtCoder

回答

Submission #389416 - AtCoder Regular Contest #017 | AtCoder

むかーしどこかの本で,1/2乗より(sqrt)小さいものでは割り切れる値が存在しない~ みたいな話を聞いたことがあったので,計算量を減らす意味で使ってみました.
上手く行きました.上限がこれくらいなら時間的には余裕あるんですね…
*1

ARC 019 A

問題

A: お買い物クライシス - AtCoder Regular Contest #019 | AtCoder

回答

Submission #389424 - AtCoder Regular Contest #019 | AtCoder

s = input()
print(s.translate(s.maketrans("ODIZSB", "001258")))

このようにtranslateとmaketransを使えば一瞬で解けます…こういう処理メソッドがあるの,素晴らしい.今後も一文字単位で複数文字を置換する場合には,活かしていきたいテクニックですね.

参考:

orangain.hatenablog.com


と,簡単? な問題ばかりですが,細かいところで有用なメソッドを知ったりと勉強になっている部分もあります.

結構解いてきたはずですが,まだA問題が残っているようで,ちょっと疲れてきました…
上から埋めていくのちょっとやめとこうかな?w

*1: 素数の値を全てリストに入れて,inでチェックするという荒業もあるようですが,ソースコード量がアホみたいなことになるので,絶対にやりません.