都内某所のコンテストに参戦

失意のうちに眠っていたので、Hacker Cupあることを完全に忘れていた。
10時に起床して、Hacker Cupの問題を読む。
A問題を解いていたが、そろそろ出かけないと不味い時間になってしまったので
出すかと思ったのが最後でした。

(日記を書いているのは12/8ではなく12/10なので結論から上げてしまうと、)
オーバーフローを喰らい、見事に処理が終わらず。
制約条件がlongまでの範囲とはあるものの、
実際プログラミングした際にその範囲を超えてしまう場合があることを忘れてはいけません。
ということを学習しました。危険だわ。

そしてギリギリで会場に向かう。
渋谷から半蔵門線ルートを使おうとしていたが、時間的にギリギリになりそうなので、
埼京線へ移動したが、ちょうど電車が行ってしまい、更にロスに。
ほんと何やってんだかーってレベルです。

実際会場入りしたのは遅刻1分でしたが、結局始まるのが1時間30分後だったので、
なんともいえない感じ。

4/10で順位は70位前後/150人でした。

ここで学んだこととしては、a/bとc/dの比較においては、
分母を払ってadとbcの比較にすべきだということ。

帰宅前のゲーセン。

f0019846_9575652.jpg

万物快楽理論93.0。
f0019846_9582481.jpg

2P側八段。これは2回目にして。

帰宅後はFHCの問題を読む。
Bを解いたが、バグを取り忘れて見事に失敗。
直したコードはこちら。

import java.util.*;
import java.io.*;

public class CopyOfBalance {

public static void main(String args[]) throws Exception{
Scanner input = new Scanner(new FileReader("./iothings/coins_game.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("./iothings/output.txt"));
int n = input.nextInt();
input.nextLine();
for(int i = 0 ; i < n ; i++){
int N = input.nextInt();
int K = input.nextInt();
int C = input.nextInt();
pw.println("Case #"+(i+1)+": "+num(N,K,C));
}
input.close();
pw.flush();
pw.close();
}

public static int num(int N,int K,int C){
int[] jars = new int[N];
int index = 1;
while(true){
if(K <= N * index)break;
index++;
}
int nindex = 0;
while(K != 0){
if(K - index >= 0){
jars[nindex] = index;
nindex++;
K -= index;
}else{
jars[nindex] = K;
K = 0;
}
}
Arrays.sort(jars);
int count = 0;
int coin_count = 0;
int tmp_count = 0;
for(int i = 0 ; i < jars.length ; i++){
if(jars[i]+tmp_count != index){
if(jars[i] == 0){
count++;
tmp_count = 0;
}else{
coin_count++;
tmp_count++;
count++;
}
}else{
if(jars[i] != 0){
count++;
coin_count++;
tmp_count++;
jars[i]--;
i--;
}else{
tmp_count = 0;
}
}
//System.out.println(coin_count+","+count);
if(coin_count == C)break;
}
System.out.println(count+","+index);
return count;
}

}


問題は、AとBしか読んでないので内容ですが、
Aはラベルが与えられていて、左から順番に構成した時のN番目のラベルがどうなるのかという問題。
BDEならば B D E BB BD BE DB DD DE ... となる感じ。3^1 + 3^2 + 3^3 ...
Bはコインと不透明な瓶があって、
コインを最初に好きな配置で入れる。
シャッフルしてもらって、必要なコイン数だけ手に入れるには、
最悪ケースでも何回コインを取り出す動作をすればいいかという問題。
44444443 のように最後以外は固めるのが正しいと思われる。

  by ddrer-yossi | 2013-12-08 23:50 | 日常生活

<< 仕事後くたくた codevs観戦! スマホデー... >>

SEM SKIN - DESIGN by SEM EXE