2008-05-01から1ヶ月間の記事一覧
CとC++って全然違うんだなぁと感じるC++二週間目くらい。キモイなコレ。 #include <iostream> void swap(int &a, int &b) { a ^= b; b ^= a; a ^= b; } int main() { int a = 1; int b = 2; swap(a, b); return 0; } ポインタなのか値なのかはっきりわかんねぇ奴だな。</iostream>…
sign(x) = x / abs(x)はゼロ除算エラーになるからダメ。と書こうと思ったけど、イマイチ引っかかる。 1 / 0 1 / 0 は不定なのはわかる。1 / 0 = xとおいて、両辺にゼロを掛けると、1 = x * 0x * 0で1になる数は無い。なので不定。 0 / 0 んじゃ、0 / 0でやっ…
とりあえずprintfデバッグをまともに出来るようにしていこう。 基本的にpだけ使えばなんでもできるようにしてみた。pは値を返すので、p(1) + p(2)とできる。いちいちcoutで次の行に書く必要は無いので結構便利。 ついでに配列をベクタに変換出来るように改造…
SRM 403 DIV2申し込んじゃった。10時からやります。目標は・・・1問突破!! 問題は 続きものの3問。ラッキーナンバーは4,7で、44,47,74,77,444...と続く。 n以下のラッキーナンバーで一番大きいのはどれか。 aからbの中にラッキーナンバーはいくつあるか。 …
ようやくまともな問題。ま、一番簡単なラインを進んでるから当然か。 工場で働いてるんだけど、毎日毎日金属のスクラップが出るので、そいつを利用して三角形のピクチャーフレームを作りたいと思ってる(センスねぇな)金属片の長さが与えられるので、三角形の…
イギリスの旧硬貨に関する問題。 一番小さい単位がペンスで、12ペンスで1シリング、20ペンスで1ポンド。ペンスを変換してコインの量を最適化せよと。 ややこしいシステムだな。今は100ペンス = 1ポンドらしい。 回答は、前に出てきた時計の問題と変わらず。 …
テキストのフォーマット問題。 全ての長さが同じになるように右揃えにしなさいと。 #include <string> #include <vector> #include <sstream> #include <iomanip> #include <algorithm> using namespace std; #define foreach(bind, item) \ for (typeof ((item).begin()) bind = (item).begin(), __ie = (</algorithm></iomanip></sstream></vector></string>…
英語で泣きそうになるな。 シャクトリムシは結構面白い動きをして、シャクトリムシ - Wikipediaこんなん。 日本語で尺取虫、英語でinchwormと言う位なので、長さを計る虫。という意味は変わらないらしい。 枝に等間隔に葉っぱが付いてる。シャクトリムシも等…
C++ではあんまり解きたくない問題。 4,5,6とか範囲が与えられるので、最小公倍数を求める。 #include <vector> using namespace std; class LCMRange { public: static int lcm(int first, int last) { vector<int> numbers; int acc = 1; for (int i = first; i <= last;</int></vector>…
簡単。 カードを配るだけ。ただし、10枚カードがあって、3人に配る場合は3枚づつ。"1231231234"を配ると{"111", "222", "333"} 普段quotient使ってるから気付かないけど、割って掛けたら違う数が出てくるっておかしな話だ。 10 / 3 * 3 = 9 10 * 3 / 3 = 10 …
C++のfindってメンドイ。数字を覚えるのに、1〜0までで"TRADINGFEW"とかテーブルを作っておいて、"LGXWEV"で709とする。という変な暗記法。暗号として使ったほうが効果的だと思う。 #include <string> #include <algorithm> using namespace std; template <class T, class U> int find_index(T se</class></algorithm></string>…
タイヤのローテーションなんて考えたこと無いよ。 タイヤのローテーションが、1 -> 3, 2 -> 4, 3 -> 2, 4 -> 1こんな感じ。初期設定から何フェーズ目で今の設定になるかという問題。 数学っぽくいけるかと思ったけど、イマイチわからなかったので、テーブル…
おっと、一問やり忘れた。 ハードディスクが複数台あるので、ががっとまとめて、最低何台必要か答える。 #include <vector> using namespace std; #define foreach(bind, item) \ for (typeof ((item).begin()) bind = (item).begin(), __ie = (item).end() ;\ bind </vector>…
プログラミング始めた頃に作った気がする。 数当てゲームは、100個の数字の中からランダムに数字を選んで数を当てるゲーム。 もうちょっと簡単にして、上限が9答えが6だとすると、 1〜9までの真ん中(1 + 9)/2の5を選ぶと、上です。と出る。 5は選んだから一…
こういう問題好きだな。 インカ帝国では文字を持ってなくて、数を表すのに「縄の結び目の形で数で表す」という手法(キープ)を使っていたらしい。 キープ (インカ) - Wikipedia Quipu - Wikipedia, the free encyclopedia へぇぇ。 で、問題。Xで結び目、-が…
また売値と買値。今度はマージンを求める。 入力が文字列なのでちょっと面倒だけど、新しい言語を覚えるには丁度いいレベル。 #include <vector> #include <string> #include <sstream> using namespace std; #define foreach(bind, item) \ for (typeof ((item).begin()) bind = (ite</sstream></string></vector>…
小学生の宿題みたいな。 買値と売値と商品数があって、一番利益が出る商品名返す。利益が無い場合は""を返す。 #include <vector> #include <string> using namespace std; class MostProfitable { public: static string bestItem(vector<int> costs, vector<int> prices, vector<int> sale</int></int></int></string></vector>…
なるほど。こうするのか。 #define foreach(bind, item) \ for (typeof ((item).begin()) bind = (item).begin(), __ie = (item).end() ;\ bind != __ie ; \ bind++) しかし、変数補足をどうするのかが問題だ。 マクロの罠にかかる恐れが!! foreach(__ie, ho…
くそぅ。問題が全然わかんねぇ。 f(x) = R * x * (1 - x)のRが与えられるのでxを0.25から始めて、不動点を求めていく。200000回不動点を求めてみて、そこから更に1000回求めてみて、最大値と最小値の差がいくつになるかを答える。と、ここまで辿りつくまでが…
しばらくブログラムよりも英語で悩みそうだ。 電話番号とかだと、東京が03,大阪が06みたいになってる。そういう文字集合をPrefixCodeというらしい。035という番号をどこかの地域に割り当てるなんて事はしないので、PrefixCodeの正当性をチェックしたいと。 {…
ロスで路上駐車の切符切られたことあるww 交通違反って何であんなに凹むんだ!? さて、ルールに基づいて、路上駐車できるところを探していく。 私道の前は停めちゃダメ。 バス停の前と、5,10メートル先は停めちゃダメ。 脇道の前と、5メートル先、5メート…
問題の意味が全然わからなかったので、英文を紙に写経して、翻訳してから取り組んだ。ゆっくりでもいいからキッチリ理解して解いていきたい。英語克服すんぞー。 シミュレーション問題。 時計屋さんは一日に数個しか時計を直せない。繁盛している時は一日に…
米ドルのフォーマットを出力する問題。 入力はドル12345と、セント6で$12,345.06と出力する。 全然ストリームがワカンネェヨ。 #include <iomanip> #include <sstream> #include <string> using namespace std; class FormatAmt { public: static string amount(int dollers, int cents</string></sstream></iomanip>…
問題を理解するのにちと時間がかかった。12345があって、各数字に分割して、割り切れる数を数える。12345は5で割り切れる。4では割り切れない、3では割り切れる、2では割り切れない、1では割り切れる。なので、割り切れる数は3つ。 class DivisorDigits { pu…
シーザー暗号のデコード。エンコード(プラス側にシフト)は簡単なんだけど、デコードはマイナスが入るのでちとメンドイ。とりあえずエンコードの時と全く同じような形を作り出すことにした。 #include <string> using namespace std; #define foreach(type ,bind, ite</string>…
TopCoderの過去問を解いていくよ。 ヤッツィーの簡単バージョン。サイコロ5個振って出た目が{4, 2, 2, 5, 4}だったら、2が2個で4ポイント、4が2個で8ポイント、5が1個で5ポイント。4が2個で8ポイントが一番高い得点なので、8ポイントを出力する。 max_elemen…
Project Eulerやってたけど、70問目を超えると「全く解ける気がしない」。かといってACM/ICPCはムリっぽいし・・・と思って、TopCoderに登録してみた。200点問題ならサックリ解けそうな感じなので、しばらくTopCoderの過去問を解いていこうかと。 が。言語が…
かなり重かった。 Problem 72 - PukiWiki1/dとして、d オイラーの関数で簡単に。と思ったけど、100万までの全ての数について素因数分解したのと変わらない訳。 100万 * √100万 = 10億。 多く見積もって10億回。少なく見積もっても1億回くらい。時間計り忘れ…
ログインして問題を解かないと回答例がオープンしないのが残念だ。 Problem 5 - PukiWiki 2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。では、1 から 20 までの整数全てで割り切れる数字の中で最小…
微妙。疲れてきたかも。Problem 73 - PukiWiki1/2と1/3の間にある真既約分数を求める。 真既約分数を求めるのがちとめんどかったので、全部見てしまった。 だいたい範囲を絞っておいて、 gcdしてみる。 だいたいなので、キッチリ範囲チェック。 今は反省して…