仕事後Topcoder、後ゲーセン、後Codeforces
参考程度に見ているのですが、あまりはかどらず。
お昼は三種チーズです。ああ、ぼっち飯・・・。(15:30)
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遅すぎた。
その後はすぐゲーセンに行き、ひと通りプレー。
成果は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