全問解けて33/361位でした
A: 来月は何月? - AtCoder Beginner Contest #011 | AtCoder
与えられた月の次の月を出力するだけ
最速解答を目指して読み込み用の関数とか作っておいたりあらかじめhttp://abc011.contest.atcoder.jp/tasks/abc011_1を開くようにしたりsubmitの時にPythonが自動で選択されるようにしたのですが、最速には届かず(5番目)
# -*- coding: utf-8 -*- import math,string,itertools,fractions,heapq,collections,re,array,bisect def s(): return raw_input().strip() def n(): return int(raw_input()) def d(): return float(raw_input()) def ls(): return raw_input().strip().split() def ln(): return map(int, raw_input().strip().split()) def ld(): return map(float, raw_input().strip().split()) def fs(): return [raw_input().strip() for i in xrange(input())] def fn(): return [int(raw_input().strip()) for i in xrange(input())] def fd(): return [float(raw_input().strip()) for i in xrange(input())] a = n() print a % 12 + 1
B: 名前の確認 - AtCoder Beginner Contest #011 | AtCoder
文字列の1文字目を大文字、2文字目以降を小文字に直して出力
# -*- coding: utf-8 -*- import math import sys import datetime s = raw_input().strip() print s[0].upper() + s[1:].lower()
C: 123引き算 - AtCoder Beginner Contest #011 | AtCoder
ある数字から1から3の数字を引く操作を100回までできるときに、3つのNG数字と等しくならずに0にできるかを答える
貪欲に引ける時はできるだけ大きい数を引いていけば良い
# -*- coding: utf-8 -*- import math import sys import datetime from decimal import * n = input() a = input() b = input() c = input() ng = set([a, b, c]) if n in ng: print 'NO' sys.exit() count = 0 while n > 0: if n - 3 not in ng: n -= 3 count += 1 elif n - 2 not in ng: n -= 2 count += 1 elif n - 1 not in ng: n -= 1 count += 1 else: print 'NO' break else: if count <= 100: print 'YES' else: print 'NO'
D: 大ジャンプ - AtCoder Beginner Contest #011 | AtCoder
上下左右に\(\frac{1}{4}\)の確率で\(D\)移動するのを\(N\)ターン繰り返した時に、最終的に\(X, Y\)の場所に到達している確率を答える
上下に何回動くかを決めれば可能な左右の回数も決まるので、組み合わせを使って確率を計算して足していく
オーバーフローしているぽかったので(?)途中はlogを使って計算している
# -*- coding: utf-8 -*- import math import sys import datetime from decimal import * def make_comb_dp(n): dp = [[0] * (n + 1) for i in xrange(n + 1)] for i in xrange(n + 1): dp[i][0] = 1 dp[i][i] = 1 for i in xrange(2, n + 1): for j in xrange(1, i): dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] return dp N, D = map(int, raw_input().split()) X, Y = map(int, raw_input().split()) X = abs(X) Y = abs(Y) if X % D != 0 or Y % D != 0 or (N - (X / D) - (Y / D)) % 2 == 1 or (N - (X / D) - (Y / D)) < 0: print 0.0 sys.exit() comb = make_comb_dp(1000) minX = X / D minY = Y / D prob = 0.0 pp = 1.0 / 4 for x in xrange(0, N - minX - minY + 1, 2): y = N - minX - x - minY t = math.log(comb[minX + x][x / 2]) + (minX + x)*math.log(pp) + math.log(comb[minX+x+y/2][y/2]) + math.log(comb[N][minY+y/2]) + (minY + y) * math.log(pp) prob += math.exp(t) print prob