2010年11月11日木曜日

TopCoderやってみた。

知り合いに誘われてTopCoderなるものに手を出してみました。
なぜかJAVAで参戦。Python使わせてください。

とりあえず、過去問で練習してます。
だめだめですけど、自分の解答を載せます。

TopCoder SRM 430 DIV 2
Problem 500 BitwiseEquations
問題文(アカウントがないと見られません)
public class BitwiseEquations {
 public long kthPlusOrSolution(int x, int k) {
  long a = 0, shift = 0;
  while(k > 0) {
   if((x & 1) == 0) {
    a |= ((long)(k & 1) << shift);
    k >>>= 1;
   }
   x >>>= 1;
   shift++;
  }
  return a;
 }
}
xを2進数で表示したときに0になる桁に、kの2進数の1桁目から入れていく感じ。
問題文からこのことを理解できれば解ける。結構時間かかった。

TopCoder SRM 427 DIV 2
Problem 250 LoveCalculator
問題文
import java.util.Arrays;

public class LoveCalculator {
 public String findBoy(String girl, String[] boys) {
  if(boys.length == 1) return boys[0];
  
  Arrays.sort(boys);
  
  int[] love = new int[boys.length];
  for(int i = 0; i < boys.length; i++) {
   int L = 0, O = 0, V = 0, E = 0;
   for(int j = 0; j < girl.length(); j++) {
    if(girl.charAt(j) == 'L') {
     L++;
    } else if(girl.charAt(j) == 'O') {
     O++;
    } else if(girl.charAt(j) == 'V') {
     V++;
    } else if(girl.charAt(j) == 'E') {
     E++;
    }
   }
   for(int j = 0; j < boys[i].length(); j++) {
    if(boys[i].charAt(j) == 'L') {
     L++;
    } else if(boys[i].charAt(j) == 'O') {
     O++;
    } else if(boys[i].charAt(j) == 'V') {
     V++;
    } else if(boys[i].charAt(j) == 'E') {
     E++;
    }
   }
   love[i] = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E))%100;
  }
  int max = love[0], maxI = 0;
  for(int i = 1; i < love.length; i++) {
   if(love[i] > max) {
    maxI = i;
    max = love[i];
   }
  }
  return boys[maxI];
 }
}
そのまんま。コード汚い。

0 件のコメント:

コメントを投稿