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

水面下の夢

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

今日の競プロ(2015/05/08) その1

電車の移動や空き時間が結構あったので,簡単なものを埋めておきました.

長くなりそうなので,続きから



wupc2nd A問題

問題

A: 団子とうさぎ - 第2回早稲田大学プログラミングコンテスト | AtCoder

回答

Submission #399416 - 第2回早稲田大学プログラミングコンテスト | AtCoder

Pythonの内包表記を上手く使って集合の和を求めて,割り算をするだけですね.

n, k = map(int, input().split())
print(sum([i ** 2 for i in range(n + 1)]) % k)
wupc2nd B問題

問題

B: 雨上がり - 第2回早稲田大学プログラミングコンテスト | AtCoder

回答

Submission #399453 - 第2回早稲田大学プログラミングコンテスト | AtCoder

いわゆる貪欲法みたいな回答パターンで行けると思いました.(3歩進めるなら3歩,ダメなら2歩,それでもだめなら1歩… 1歩もダメなら水たまりを無視して3歩一気に進む! みたいな)

n = int(input())
k = list(input())
count = 0
pointer = 0
while pointer < n - 1:
    for i in range(1, 4):
        tp = pointer + (4 - i)
        if tp < n and k[tp] == ".":
            pointer = tp
            break
    else:
        pointer += 3 if pointer + 3 < n else n - pointer
        count += 1
print(count)
Code Formula 2014 予選B A問題

問題

A: サイコロ - Code Formula 2014 予選B | AtCoder

回答

Submission #399413 - Code Formula 2014 予選B | AtCoder

サイコロの裏面を求める.7 - 入力された値で簡単に求まりますね.

print(7 - int(input()))
京都大学プログラミングコンテスト2013 A問題

問題

A: 旧総合研究7号館 - 京都大学プログラミングコンテスト2013 | AtCoder

回答

Submission #399412 - 京都大学プログラミングコンテスト2013 | AtCoder

入力されたものを見ながら,作成年度より前であれば更新… みたいな感じ.
入力される年度がバラバラだったらソートする手間が入るので,その辺りは省略されていて気が楽でした….
(まあ,ソートするだけで良いので,特に問題無いとは思いますが)

name = "kogakubu10gokan"
n, q = map(int, input().split())
for _ in range(n):
    s = input().split()
    if int(s[0]) <= q:
        name = s[1]
    else:
        break
print(name)
New Year Contest 2015 A問題

問題

A: 2015 - New Year Contest 2015 | AtCoder

回答

Submission #399399 - New Year Contest 2015 | AtCoder

2進数に変換して,反転したものが一致しているかどうかを確認する.
reverseメソッドとか利用してみたかったけど,これ戻ってくるオブジェクトがアレで使いづらかったので,s[::-1]で反転.
また,2進数に変換すると,0b~~みたいな形式になるので,0bの部分を省くために,配列2つ目から取り出すように工夫….

s = str(bin(int(input())))[2:]
print("Yes" if s == s[::-1] else "No")
Donutsプロコンチャレンジ2015 A問題

問題

A: ドーナツの体積 - Donutsプロコンチャレンジ2015 | AtCoder

回答

Submission #399359 - Donutsプロコンチャレンジ2015 | AtCoder

公式に打ち込むだけ.

import math as m
 
R, D = map(int, input().split())
print((R * R * m.pi) * (D * 2 * m.pi))
Code Formula 2014 予選A A問題

問題

A: 立方数 - Code Formula 2014 予選A | AtCoder

回答

Submission #399253 - Code Formula 2014 予選A | AtCoder

探索範囲を間違えまくってて辛かった.pythonのrange(0, N)は0からN-1までしか調べないってそれ一番言われてるから…(このミスのせいで引っかかりまくる)
ここは, range(int(math.pow(n, 1.0 / 3.0)) + 2)ですね,+1ではないです.
Nの1/3 乗のところまで調べれば十分です.

import math
 
n = int(input())
for i in range(int(math.pow(n, 1.0 / 3.0)) + 2):
     if i ** 3 == n:
         print("YES")
         break
else:
    print("NO")
Code Formula 2014 予選A B問題

問題

B: ボウリングゲーム - Code Formula 2014 予選A | AtCoder

回答

Submission #399348 - Code Formula 2014 予選A | AtCoder

地道にreplaceですかねえ.
元々のボウリングピンの配置は文字列で考えました.それと一回目,二回目,倒れなかったものでそれぞれ記号を置換.
倒れなかったものの置換はもう少し簡単に出来るきがしないでもないですが… どうでしょうか?

def replacer(li, ch):
    for elem in li:
        for i in range(4):
            table[i] = table[i].replace(str(elem), ch)
 
table = ["7 8 9 0", " 4 5 6 ", "  2 3  ", "   1   "]
a, b = map(int, input().split())
 
replacer(map(int, input().split()), ".")
replacer(map(int, input().split()), "o")
replacer(list(range(0, 10)), "x")
 
for i in range(4):
    print(table[i])
天下一プログラマーコンテスト2014予選B A問題

問題

A: HAGIXILE - 天下一プログラマーコンテスト2014予選B | AtCoder

回答

Submission #399261 - 天下一プログラマーコンテスト2014予選B | AtCoder

replaceメソッドで置き換えるだけ.

print(input().replace("HAGIYA", "HAGIXILE"))
CODE FESTIVAL 2014 決勝(オープン) A問題

問題

A: 50m走 - CODE FESTIVAL 2014 決勝(オープン) | AtCoder

回答

Submission #399263 - CODE FESTIVAL 2014 決勝(オープン) | AtCoder

一見,複雑そうな計算が必要かと思いますが,入力と回答をよく見ると,50 / 50m走るのにかかった時間(入力)で求まることに気づきます.

print(50 / int(input()))
CODE FESTIVAL 2014 決勝(オープン) B問題

問題

B: 暗算ゲーム - CODE FESTIVAL 2014 決勝(オープン) | AtCoder

回答

Submission #399274 - CODE FESTIVAL 2014 決勝(オープン) | AtCoder

文字列をリストに変換して,インデックスの値で足すか引くかを決定して計算.

l = list(map(int, list(input())))
res = l[0]
for i in range(1, len(l)):
     res += l[i] if i % 2 == 0 else -l[i]
print(res)


ひとまず,第一弾終わり!!!