"Idle Talking About My Interesting things"
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
さて、以前のエントリーにでTopCoderの説明みたいなのをしたけど、今回はきまぐれにTopCoderの問題の解説をしてみようと思う。
でもあんまり難しいとちゃんと解説できないかもしれないし、第1回目だし、一番簡単な問題でいいかな。 ====== Question ========== タイトルの回の問題は… 「引数として与えられる二つの配列A, B(長さは一緒)を考えた時、それぞれの要素同士を乗算して、その積を足して、その和が最小となる組み合わせを求め、その和を返せ」 って感じ。 具体的に例を示すと… A=[1,4,6,2] B=[10,4,5,5] 1つずつ要素を掛けて、それを足して、答えが最小になるようにだから… Answer= 1*10 + 2*5 + 4*5 + 6*4 = 64 こんな感じの計算をするメソッドを作るのがタスクなんだけど…まあ簡単だよね? じゃあ、問題の解法を続きで解説します。 ======== Answer =========== さて大体の人は解説の必要もないと思うけど、まあ一応載せておきます。 つまり、解が最小になるようにすればいいんだから… ① Aの最小の要素とBの最大の要素を見つけて掛け合わせる ② そのときに使ったそれぞれの要素を配列から消去 ③ その積を全体の合計に足す ④ ①②③の工程を残りの要素数が0になるまで繰り返す って感じのアルゴリズムでいけそうだな。 ってことで、解等例のコード(C++)。 -------------------------------------- int minimalArrangement(vector <int> A, vector <int> B){ sort(A.begin(),A.end()); sort(B.begin(),B.end()); int s = 0; for(int i = 0; i < A.size(); i++) s += A[i] * B[B.size() - 1 - i]; return s; } -------------------------------------- 何をやっているかって言うと、 ①A、Bをソーティング ②Aの先頭から、Bの最後尾から、順に乗算して、積を適当な変数に加算 って感じです。たいしたことはやって無いよね?(でも、TopCoderは問題文が英語だし制限時間もあるしで、コーディングスキルの他に数学英語の速読力も必要なんだよね orz) ちなみにこっちにはJavaで書いたコードも置いてあるのでよければ参考に。 TopCoderには日本人が異様に少なくて寂しいので、もし興味が湧いたなら是非一度みんな遊び感覚で挑戦してみるといいと思う。タダだし。 では。 PR |
カレンダー
フリーエリア
最新CM
[12/07 柿崎]
[06/18 sick]
[04/25 あーうー]
[03/16 marybellha]
[03/16 derrillhor]
最新記事
(02/16)
(01/10)
(01/08)
(12/11)
(10/08)
最新TB
プロフィール
HN:
Hamhei HORIUCHI
HP:
性別:
男性
職業:
Researcher
趣味:
Reading, Coding, Thinking, Singing, & Football
自己紹介:
貴方が本を読み続ける限り、貴方は取るに足りない紙屑の存在に幻滅し続けるだろう。
Blogもそれと同じで、その殆どは読んだ人間に対して何も学ばせることの無い、全く意味を為さない落書きみたいな内容だ. 一方,文章を書くという行為は、主体に対して幾許かの成長を約束する.退化はあり得ない. その一例として、物事を体系化する手順を学習することができたり,自己理解が促進されたり,さらには新鮮な驚きと発見が内から魔法のように引き出されることもある. 最後に、我々の価値観が互いを許容でき,かつ刺激し合う程度に『違って』いますように.
ブログ内検索
最古記事
(01/14)
(01/14)
(01/21)
(01/24)
(01/26)
P R
カウンター
忍者アド
アクセス解析
アクセス解析
|