2011-07-01から1ヶ月間の記事一覧

AOJ0040 Affine Cipher

問題リンク Affine Cipher 解法 置換式の中にあるαとβが分からないと置換のしようがないのでこちらから求めます。[0,26)を与えて[0,26)の値域に全単斜するようなαとβの対を探します。とりあえず適当に、1 あとは、発見したαβの対を使って置換してみて、"that…

AOJ0039 Roman Figure

問題リンク Roman Figure 解法 ローマ数字を10進数に変換する仕組みを作ると楽になると思います。 あとはルール通り、右隣にくるローマ数字が大きいか小さいかで場合分けして加算していきます。 ソース

AOJ0038 Poker Hand

問題リンク Poker Hand 解法 まぁ、やるだけの問題です。 ストレートの判定に気をつけるくらいでしょうか。 ソース

AOJ0036 A Figure on Surface

問題リンク A Figure on Surface 解法 超まわりくどい方法で解いていました。 ピースを1つの整数値で表して解こうとしたみたいです。 s = t = 0とします。 8*8マップを見て行って1になっている箇所をみつけたらフラグをonにします。 フラグがonになったら1…

AOJ0035 Is it Convex?

問題リンク Is it Convex? 解法 四角形が凸かどうかを判定する問題です。 辺を考えてそれ以外の2点が全部左にあるか、もしくは全部右にあるかを調べ、これがどの辺についても成り立ったらそれは凸だと判定しました。 これ以外にも、内角がどれも180度以…

AOJ0034 Railway Lines

問題リンク Railway Lines 解法 電車がすれ違うということは、2つの電車の走行距離の和が路線全体の長さ以上になると同じ事です。 左から右へ走る電車を1駅分進めます。進んだ距離を速さで割れば走行時間がでるので、その時間分電車2を動かします。動いた…

AOJ0033 Ball

問題リンク Ball 解法 全探索で解きました。ボールを右に流す、左に流すを全部試しても2^10程度なので余裕です。 ソース

AOJ0032 Plastic Board

問題リンク Plastic Board 解法 辺a, bと斜辺cの長さが与えられて、長方形とひし形の個数を数える問題。 長方形ならa^2+b^2=c^2が成り立ち、ひし形ならa=bが成り立ちます。 ソース

AOJ0031 Weight

問題リンク Weight 解法 品物の重さXを2進数に変換した時に1になっている桁の重みの重りを採用します。 ビット演算子を使うちょうどいい練習問題だと思います。 ソース

AOJ0022 Maximum Sum Sequence

問題リンク Maximum Sum Sequence 解法 最大連続部分和を求める問題です。 n区間の左と右を全通り試すO(n^2)の方法でももしかしたら通るかもしれませんが時間的に厳しそうです。 最大連続部分和はO(n)で求められます。 要素をa1〜anとします。 xiをa1〜aiま…

AOJ0021 Parallelism

問題リンク Parallelism 解法 2直線の傾きを求めてそれらが同じかを調べても解けると思いますが、ABベクトルとCDベクトルの外積が0なら平行と分かります。 AB x CD = |AB||CD|sinθ なので、ベクトルのなす角が平行(θ=0,180)なら外積が0になるわけです。 ソ…

AOJ0020 Capitalize

問題リンク Capitalize 解法 英小文字を見つけたら英大文字に変換すればいいので、Character.toUpperCase()を使います。 以下のソースでAcceptしてるので、このメソッドはアルファベット以外の文字は何も変化が起きないという仕様なのでしょう。 ソース

AOJ0019 Factorial

問題リンク Factorial 解法 1 n! = n*(n-1)! なんでDPチックに解くのがより高速でしょうかね。 蛇足ですが、n!の桁数が欲しい時にはスターリングの近似で求められます。PKUにそんな問題があった気がします。 ソース

AOJ0018 Sorting Five Numbers

問題リンク Sorting Five Numbers 解法 超シンプルソーティング問題です。 Arrays.sort()でソートかけて後ろから出力すれば勝ちです。 なんか自分は選択法を直書きして解いてますが。 ソース

AOJ0017 Caesar Cipher

問題リンク Caesar Cipher 解法 アルファベットをK文字ずらして暗号解読する問題です。 一瞬方針が立たないかもしれないですが、Kは0〜25の時のみ考えればよく、暗号文も短いので全探索すればいいと思います。あるKのときに、"the","this","that"という単語…

AOJ0016 Treasure Hunt

問題リンク Treasure Hunt 解法 幾何問題です。 最初北を向いて原点にいます。(L,da)という対の入力がいくつか読み込んで、 自分が向いている方にLメートル進んでからda度向きを変えるということを繰り返します。 今いるところ(x,y)からa度の方向へLメートル…

AOJ0015 National Budget

問題リンク National Budget 解法 多倍長演算問題。大きさ80の配列を用意して・・・なんてしなくても BigIntegerという素敵なクラスがJavaにあるんでこれの恩恵を受けました。 桁数が80を超えたら"overflow"を出さないといけないのでそれのチェックを忘れ…

戯言

超簡単な問題に対しても自分の解法を載せていく方針で行こうと思います。 簡単な問題でも他人の解法が気になるってこともあるし、簡単だからという理由で解法を紹介している記事が見つからず路頭に迷っているような方もいるかもしれないので。 あとJava使い…

AOJ0030 Sum of Integers

問題リンク Sum of Integers 解法 0〜9のなかから異なるn個を選んで和がsになる組み合わせを答える問題。 数字を選ぶとき、小さい方の数字から、もしくは大きい方の数字から選ぶんだっていうルールを設ければ選ぶ数字の組み合わせが重複することがありません…

AOJ0029 English Sentence

問題リンク English Sentence 解法 Mapを用意して、出現する文字列とその出現回数を格納します。 ただ、これをやるとボクシング変換とかそこらへんのものがごちゃごちゃ働いて遅いんですけど、問題のサイズが小さいので本問では大丈夫です。 (蛇足:問題の…

AOJ0028 Mode Value

問題リンク Mode Value 解法 最頻する値を答える問題です。 入力された数字をカウントしていき、同時にカウントの最大値を記録。 入力が終わったら数字を小さい順にみていって出現回数が最頻だったら出力、で勝ちです。 ソース

AOJ0027 What day is today?

問題リンク What day is today? 解法 カレンダー問題です。 C++とかの言語にあるかは知らないですが、JavaにはCalendarクラスが用意されているので瞬殺できます。 ただ、月数は1〜12じゃなくて0〜11で表現される、などといった注意点があるのでそこは頑張っ…

AOJ0026 Dropping Ink

問題リンク Dropping Ink 解法 インクがしみる量は最大でも12程度なので、インクの大きさに応じた移動量ベクトルを用意してしまうのが手っ取り早い解法でしょうか。 自分はこれまた面倒なことして解いています。 メソッド f(x, y, z):座標(x,y)が座標(dx,…

AOJ0025 Hit and Blow

問題リンク Hit and Blow 解法 Aさんの4つの数字で表れた場所を記録します。 Bさんの入力は1つずつ見ていき、 Bさんの数字がAさんにも表れているかつ場所が同じならHit++ そうでなければblow++ しています。ルールに忠実にカウントしてるだけです。 ソース

AOJ0024 Physical Experiments

問題リンク Physical Experiments 解法 物理問題です。鉛直投げ上げ投げさげ、水平投射、斜方投射あたりは押さえておいて損はないと思います。 玉をN階から静かに落とし、玉が地面にぶつかるときの速度がVを初めて超えるのはNがいくつのときかを答えます。 …

AOJ0023 Circles Intersection

問題リンク Circles Intersection 解法 幾何問題。2つの円の中心の距離Dと半径Ra, Rbを操って解く問題です。 (1) Ra + Rb (2) D + Ra (3) D + Rb (4) どれでもないなら円周は交点を1つか2つ持って、交わる の場合分けで解きました。たしか(2)と(3)のとこ…

AOJ0002 Digit Number

問題リンク Digit Number 解法 桁数はその整数を文字列と見なした時、文字列長と一致するので 和を文字列に変換すれば勝ちです。 ソース

AOJ0001 List of Top 3 Hills

問題リンク List of Top 3 Hills 解法 ソート問題です。 自分はPriorityQueueにComparator渡して3回pollするなんて回りくどいことして解いたようです。 大きさ10の配列aをArrays.sort()に渡して昇順にソートして、後ろの3つの要素を出力した方が素直でい…

AOJ0000 QQ

問題リンク QQ 解法 この問題には入力がありません。 九九を1の段から9の段まで出力するだけの問題です。 for文もしくはwhile文さえ使えれば解けます。JavaならSystem.out.println();を使えばいいと思います。 Eclipseのエディタならば「syso」まで打って…

AOJ0014 Integral

問題リンク Integral 解法 積分を求める問題。 f(x)*d (d ソース