どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

AOJ

0105: Book Index

AOJ

本の索引 問題ページ 解き方 語句とページ番号を辞書に登録、語句をアルファベット順に出力し、同時にページ番号も昇順に出力するだけ。 コード(python) d = {} while True: try: data = input().split() except: break word = data[0] number = int(data[1]…

1200: Goldbach's Conjecture

AOJ

Problem A:Goldbach's Conjecture 問題ページ 解き方 求めたい答えは与えられた4以上の偶数あるnに対して、そのnがある2つの素数の和と等しいような素数のペアの数を求めることである。 まず素数を用意しなければいけないので、エラトステネスの篩を使っ…

1601: Short Phrase

AOJ

短句 問題ページ 解き方 単語の並びを5,7,5,7,7の順に区切っていくだけ。 コード(python) p = [5, 7, 5, 7, 7] while True: n = int(input()) if n == 0: break word = [input() for _ in range(n)] flag = False for i in range(len(word)): ip = …

2100: Saizo

AOJ

Problem A:サイゾウ 問題ページ 解き方 与えられたブロックに対して、登らなけらばならない最大の段差と降りなければならない最大の段差を求めるだけ。 コード(python) t = int(input()) for _ in range(t): n = int(input()) blocks = list(map(int, input(…

0020: Capitalize

AOJ

大文字変換 問題ページ 解き方 mapを使って入力を大文字に変換し、joinを使ってmapから変換した文字列を取り出す。 コード(python) print("".join(map(str.upper, input())))

0019: Factorial

AOJ

階乗 問題ページ 解き方 mathモジュールのfactorialを使う。 コード(python) import math print(math.factorial(int(input())))

0018: Sorting Five Numbers

AOJ

5つの数の整列 問題ページ 解き方 sortedとスライスを使う。 コード(python) print(*sorted(map(int, input().spilt()))[::-1])

0015: National Budget

AOJ

国家予算 問題ページ 解き方 テストケースではpythonを使うとオーバーフローについて心配する必要はなかったので、 与えられた数の和が80桁を超えればoverflowと出力、そうでなけらばそのまま和を出力するだけ。 コード(python) N = int(input()) for _ in…

0017: Caesar Cipher

AOJ

シーザー暗号 問題ページ 解き方 this、that、theのいずれかの単語が必ず含まれているので、どの単語が含まれているのかを見つける。 見つけ出したあとはその単語ともとに復号していく。 コード(python) import string strings = string.ascii_lowercase clu…

0016: Treasure Hunt

AOJ

宝探し 問題ページ 解き方 mathモジュールのsinとcosを使って求める。 sinとcosにはラジアンを渡す必要があるので、はじめにラジアンを求める。 ラジアンの求め方は角度x(π/180)。最初真っ直ぐ向いているので角度は90度。この角度と与えられた距離、求め…

0104: Magical Tiles

AOJ

不思議なタイル 問題ページ 解き方 5種類のタイルの情報を辞書に登録しておき、タイルの文字列を読み取り辞書に基づき動くだけ。条件より部屋の外に出ることはないので特に注意することはない。LOOPするかしないかの判定はタイルの枚数より判定する。なぜな…

0014: Integral

AOJ

積分 問題ページ 解き方 長方形の横の長さが与えられるので、それを基に縦の長さを求めて長方形の面積を求める。 その求めた長方形の面積を足していき、近似的な面接を求める。 コード(python) while True: try: d = int(input()) except: break print(sum(d…

0013: Switching Railroad Cars

AOJ

電車車両入替え 問題ページ 解き方 スタックを使うだけ。 車両が入ればappendし、出ればpopし出力する。 コード(python) stack = [] while True: try: num = int(input()) except: break if num == 0: print(stack.pop()) else: stack.append(num)

0012: A Point in a Triangle

AOJ

三角形と点 問題ページ 解き方 外積を利用する。 3つのベクトルが全て同じ方向を向いているとき、点Pは三角形の内側にある。 コード(python) while True: try: x1, y1, x2, y2, x3, y3, xp, yp = map(float, input().split()) except: break AB = [x2-x1, y…

0011: Drawing Lots

AOJ

阿弥陀くじ 問題ページ 解き方 阿弥陀くじの状態を記憶するリストを用意する。 横棒のリストa, bを受け取ると、阿弥陀くじのリストのインデックスa-1とb-1の要素を入れ替える。 コード(python) w = int(input()) n = int(input()) kuji = [i+1 for i in rang…

0502: Dice

AOJ

Dice 問題ページ 解き方 サイコロとそのサイコロの動かし方を記憶した辞書を用意し指示に従ってサイコロを動かす。 サイコロの初期配置はリストで表すと[1, 2, 3, 4, 5, 6]。 指示がきたら辞書を参照する。例えば、Northという指示の場合、 "North": (1, 5, …

0010: Circumscribed Circle of a Triangle

AOJ

外接円 問題ページ 解き方 3つの点が与えられるので、それらを使い三角形の三辺を求める。 外接円の半径は余弦定理と正弦定理より求めることができる。 外心は円の方程式を利用して求める。 円の方程式はx2+y2+lx+my+n=0より、lx+my+n=-(x2+y2)と表すことが…

0103: Baseball Simulation

AOJ

野球シミュレーション 問題ページ 解き方 塁上の情報を記憶するリストを用意する。 イベントデータがHITで、3塁に走者がいるなら1点加算し、1塁と2塁の走者がいるならそれぞれ次の塁へ進ませる。if文を使わなくてもスライスを使えば短いコードで書くこと…

0009: Prime Number

AOJ

素数 問題ページ 解き方 エラトステネスの篩を使って素数のリストを用意し、そこから素数の値のみを取り出したリストを作る。 pytry3g.hatenablog.com そして受け取った入力nに対して、そのn以下の素数の数を出力する。 いろいろやり方はあると思うが今回…

0008: Sum of 4 Integers

AOJ

4つの整数の和 問題ページ 解き方 a, b, cをそれぞれループで回す。a+b+c+d=nよりnからa, b, cの和を引くとdを求めることができる。ここでdは0以上9以下になっていればa, b, c, dの和とnは等しいことがわかる。等しければ組み合わせとしてカウントする…

0007: Debt Hell

AOJ

借金 問題ページ 解き方 一週間ごとに5%の利子を借金に加え、そこから1000円未満を切り上げる。 1000円未満の切り上げは少し工夫をする。例えば、借金が125125円だとする。 これを1000で割ると125.125になる。ここでmathライブラリのceilを使うと…

0102: Matrix-like Computation

AOJ

表計算 問題ページ 解き方 行列を入れるリストmatrix[row][column]を用意し、1行目から行列の値とその和を出力していくだけ。ただし、右詰め5桁で出力する必要があるので、formatを使う。 最後の行は列の和を出力するがこれはzipを使えば簡単に求めることが…

0101: Aizu PR

AOJ

Aizu PR 問題ページ 解き方 文字列を置換するだけ、pythonではreplaceを使うと簡単にできる。 コード(python) n = int(input()) dataset = [input().replace("Hoshino", "Hoshina") for _ in range(n)] print(*dataset, sep="\n")

0501: Data Conversion

AOJ

Data Conversion 問題ページ 解き方 はじめに変換表が与えられるので、それらを辞書に登録する。 あとは、変換するデータを辞書にもとづき変換するだけ。 コード(python) while True: n = int(input()) if n == 0: break converter = {} for _ in range(n): …

Volume16

AOJ

1600: Entrance Examination 1600: Entrance Examination 解答例

1600: Entrance Examination

AOJ

入学試験 問題ページ 解き方 m人の得点をリストにいれる。あらかじめ得点は高い順に入力されることが保証されているのでソートの必要はない。 forループでnminからnmax人までのギャップを調べ、そのギャップが最大値の場合そのときの人数nを答えとする。 …

Volume5

AOJ

0500: Card Game 0501: Data Conversion 0502: Dice 0500: Card Game 解答例 0501: Data Conversion 解答例 0502: Dice 解答例

0500: Card Game

AOJ

Card Game 問題ページ 解き方 AとBの得点をもつリストを用意する。 1番目の要素にAの得点、2番目の要素にBの得点を入れるようにする。Aの得点が高ければ2枚のカードの数字の合計を1番目の要素に、Bの得点が高ければ2枚のカードの合計を2番目の要素に、同じな…

Volume1

AOJ

0100: Sale Result 0101: Aizu PR 0102: Matrix-like Computation 0103: Baseball Simulation 0104: Magical Tiles 0100: Sale Result 解答例 0101: Aizu PR 解答例 0102: Matrix-like Computation 解答例 0103: Baseball Simulation 解答例 0104: Magical T…

0100: Sale Result

AOJ

販売実績 問題ページ 解き方 売上金額(data)と社員番号(order)を持つリストを用意する。 dataのindexが社員番号に対応している。例えば、社員番号が1001の場合dataは data[1001] = 売上 となる。 orderには入力された順に社員番号を入れていく。 入力が…