2010年11月17日水曜日

TopCoder練習 SRM 422 DIV2

250
問題文(要ログイン)
public class MultiNumber {
 public String check(int number) {
  if(number < 10) {
   return "NO";
  }
  String num = Integer.toString(number);
  //String.valuOf(number);
  for(int i = 1; i < num.length(); i++) {
   String a = num.substring(0, i);
   String b = num.substring(i);
   int n = 1, m = 1;
   for(int j = 0; j < a.length(); j++) {
    n *= Integer.parseInt(a.substring(j, j+1));
   }
   for(int j = 0; j < b.length(); j++) {
    m *= Integer.parseInt(b.substring(j, j+1));
   }
   if(n == m) {
    return "YES";
   }
  }
  return "NO";
 }
}
Javaでint→StringとString→intの変換する方法がわからなくて手間取った。 今気づいたけど、このプログラムちょっと無駄なことしてるね。

500
問題文
public class PrimeSoccer {
 public double getProbability(int skillOfTeamA, int skillOfTeamB) {
  double a = 0.0;
  double b = 0.0;
  //2
  a += ((double)skillOfTeamA/100.0) * ((double)skillOfTeamA/100.0) * 153.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 16.0);
  //3
  a += Math.pow((double)skillOfTeamA/100.0, 3.0) * 816.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 15.0);
  //5
  a += Math.pow((double)skillOfTeamA/100.0, 5.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 13.0);
  //7
  a += Math.pow((double)skillOfTeamA/100.0, 7.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 11.0);
  //11
  a += Math.pow((double)skillOfTeamA/100.0, 11.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 7.0);
  //13
  a += Math.pow((double)skillOfTeamA/100.0, 13.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 5.0);
  //17
  a += Math.pow((double)skillOfTeamA/100.0, 17.0) * 18.0 * (double)(100 - skillOfTeamA)/100.0;
  
  //2
  b += ((double)skillOfTeamB/100.0) * ((double)skillOfTeamB/100.0) * 153.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 16.0);
  //3
  b += Math.pow((double)skillOfTeamB/100.0, 3.0) * 816.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 15.0);
  //5
  b += Math.pow((double)skillOfTeamB/100.0, 5.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 13.0);
  //7
  b += Math.pow((double)skillOfTeamB/100.0, 7.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 11.0);
  //11
  b += Math.pow((double)skillOfTeamB/100.0, 11.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 7.0);
  //13
  b += Math.pow((double)skillOfTeamB/100.0, 13.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 5.0);
  //17
  b += Math.pow((double)skillOfTeamB/100.0, 17.0) * 18.0 * (double)(100 - skillOfTeamB)/100.0;
  double c = a*b;
  return a+b-c;
 }
}
ただの計算。プログラムより電卓でやったほうがいいんじゃね?ってレベル。
確率の計算です。組み合わせはGoogle電卓で出した。
18までの素数は7つしかないので結構無理やり解いてます。

0 件のコメント:

コメントを投稿