クリスマスイブはなんと、プログラミングコンテストが3つも開催されていました。
とはいえ、朝帰りだったので、TopCoderは見事に逃してしまいました。残念。
起きたときには開始10分後でした。不貞寝して1時半起き。
ほとんどやる気もない状態で、飯後に、Χmas contestに挑む。
A、組み合わせを出力する問題。見るからに非常に面倒な気がしたので諦めてBへ。
Bは丁度いまやろうとしていることに近いことをやるだけだ、普通に実装しよう!えい!
と思ったら25点どまり。何かといえばメモリの使いすぎということ。
じゃあ使わない方針で考えてみようと思い、実装したら今度はTLE。
うーん、だめだ、Eへ行こう。
ということでE問題へ。これはいわゆる鶴亀算。
wrong answer
limit exceeded
accepted
などといったものがあるが、問題数だけで、acceptedした数を求めるという問題。
これは難なく組むことが出来たが、最初は何回か間違えた。
最後はDへ。Cは見た感じ写像とか面倒そうなのでパスした。
Dは、文字を取り除いて回文にするが、文字の取り除き方で、辞書順で一番早いものを出力する
という問題。色々考えたけど、最終的に通りませんでした。だめですね・・・。
夜はケンタッキーチキン。

食べた後は21時からすぐにcodeforces。今年最後なので気合入れました。
1問目は、本のページ数と、曜日ごとに読めるページ数が与えられていて、何曜日に読み終わるか
を出力する問題。5分で解いた。
import java.util.Scanner;
public class Test {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] week = new int[7];
for(int i = 0 ; i < week.length ; i++){
week[i] = input.nextInt();
}
System.out.println(page(n,week));
}
public static int page(int n,int[] week){
int i = 0;
while(n > 0){
if(i == 7)i = 0;
n -= week[i];
i++;
}
return i;
}
}
2問目は、部屋の長さ高さ幅が与えられて、いろいろな費用の壁紙があり、
なるべく安い費用で壁紙を貼り合わせ、そのコスト値を求める問題。
色々と制約があり、解くのに50分はかかりました。
実際難しかったようです。
import java.util.Scanner;
public class Test {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] rl = new int[n];
int[] rw = new int[n];
int[] rh = new int[n];
for(int i = 0 ; i < n ; i++){
rl[i] = input.nextInt();
rw[i] = input.nextInt();
rh[i] = input.nextInt();
}
int rolln = input.nextInt();
int[] rolll = new int[rolln];
int[] rollw = new int[rolln];
int[] rollc = new int[rolln];
for(int i = 0 ; i < rolln ; i++){
rolll[i] = input.nextInt();
rollw[i] = input.nextInt();
rollc[i] = input.nextInt();
}
System.out.println(rollcost(n,rl,rw,rh,rolln,rolll,rollw,rollc));
}
public static int rollcost(int n,int[] rl,int[] rw,int[] rh,int rolln,int[] rolll,int[] rollw,int[] rollc){
int cost = 0;
for(int i = 0 ; i < n ; i++){//rooms
int sw = (rl[i]+rw[i])*2;
int rcost = 999999999;
int tmcost = 0;
for(int j = 0 ; j < rolln ;j++){//rolls
int wr;
if(sw % rollw[j] != 0){
wr = sw/rollw[j]+1;
}else{
wr = sw/rollw[j];
}
int hs = rolll[j]/rh[i];
if(hs != 0){
if(wr % hs != 0){
tmcost = rollc[j]*(wr/hs + 1);
}else{
tmcost = rollc[j]*(wr/hs);
}
}else{
//hs = rh[i]/rolll[j];
//tmcost = rollc[j]*wr*hs;
tmcost = 999999999;
}
rcost = Math.min(rcost,tmcost);
}
cost += rcost;
}
return cost;
}
}
3問目はよくわからず。問題文の意味があんまりよく分からずに適当にやっていたので、
通りませんでした。韻を踏むとかそういうお話。
ということで、2問目、3問目が曲者だったせいか、
なるほど正解者があまり居ないので、順位も割りといい位置につけ、
レーティングもそろそろ色が変わるんじゃないかというところまできました。
絶好調です。楽しい聖夜でした☆