仕事後Topcoder、後ゲーセン、後Codeforces

今日はお仕事。翻訳メインですが、Google翻訳のページが死んでいました。
仕事後Topcoder、後ゲーセン、後Codeforces_f0019846_18344673.png

参考程度に見ているのですが、あまりはかどらず。

お昼は三種チーズです。ああ、ぼっち飯・・・。(15:30)
仕事後Topcoder、後ゲーセン、後Codeforces_f0019846_17372423.jpg


18時ぐらいに切り上げ、20時のTopCoderに間に合わせる。

まずはeasy。
ぞうさんが最短ページより1冊分だけ多く読んで多く読んだアピールしたいということなので、
ソートして、短い順から取って行って、最後の本だけ1つ先を読めばok。


import java.util.Arrays;

public class LittleElephantAndBooks {

public int getNumber(int[] pages, int number) {
int sum = 0;
Arrays.sort(pages);
for(int i = 0 ; i < number ; i++){
if(i == number-1){
sum += pages[i+1];
}else{
sum += pages[i];
}
}
return sum;
}

}


mediumは、1~Nまでの数値を2回並べて、
それぞれの最大値を取って行って、それがKを超えるのが何通りあるか判別する問題。
いろいろ考えたけど、法則性がなんともいえなかったので、総当りで間に合うと判断しました。
next_permutationがない言語はめんどくさい・・・。


import java.util.Arrays;

public class LittleElephantAndPermutationDiv2 {
static long count = 0;
public long getNumber(int N, int K) {
count = 0;
make_perm(0, new int [N], new boolean [N+1],N,K);
return count*perm(N);
}

static void make_perm(int n, int[] perm, boolean[] flag,int N,int K){
if(n == perm.length){
int sum = 0;
for(int i = 0 ; i < perm.length ; i++){
sum += Math.max((i+1), perm[i]);
}
if(sum >= K)count++;
} else {
for(int i = 1; i <= perm.length; i++){
if(flag[i]) continue;
perm[n] = i;
flag[i] = true;
make_perm(n + 1, perm, flag,N,K);
flag[i] = false;
}
}
}

static long perm(long i){
if(i == 1)return 1;
return i*perm(i-1);
}


}


取り敢えず2完でレートは1073->1081。medium遅すぎた。

その後はすぐゲーセンに行き、ひと通りプレー。

仕事後Topcoder、後ゲーセン、後Codeforces_f0019846_17455666.jpg

成果はREINCARNATIONフルコンのみ。

その後はCodeforces #202へ。

A問題は、100と50と25があって、
順番にお金を支払っていく人たちが居て、手持ちだけで支払えるかどうかという問題。
気をつけるべきは100を出してきた人に対して25*3でも支払えるということ。
ここがhackの対象でした。


import java.util.Arrays;
import java.util.Scanner;

public class Main2 {
public static void main(String args[]){

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i = 0 ; i < n ; i++){
a[i] = sc.nextInt();
}
int[] change = new int[3];
boolean ok = true;
for(int i = 0 ; i < n ; i++){
if(a[i] == 100){
if(change[1] >= 1 && change[0] >= 1){
change[2]++;
change[1]--;
change[0]--;
}else if(change[0] >= 3){
change[2]++;
change[0]-=3;
}else{
ok = false;
break;
}
}else if(a[i] == 50){
change[1]++;
if(change[0] == 0){
ok = false;
break;
}
change[0]--;
}else{
change[0]++;
}
}
if(ok){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}


B問題はペイント量が与えられていて、1~9の各数字の消費量があり、
最大の数を書けという問題。なんか解けなかった。

C問題は、n人いて、ai回ゲームをプレーしたい人がそれぞれいる。
このゲームは1回につき審判が1人必要で、審判はゲームしてるほうに入らない。
最低で何回ゲームする必要があるかを求めるという問題でした。

終了後はモンハンを少しだけ。

  by ddrer-yossi | 2013-09-27 23:05 | TopCoder

<< 休みなのでモンハン モンハン日和 >>

SEM SKIN - DESIGN by SEM EXE