2010年12月13日月曜日

TopCoder SRM490 DIV2

2回目。落ち込む。チャレンジやってみたくてやったけど失敗した。
250 ○
500 未提出
1000 未提出
Rate 955 -> 789



250
public class LuckyCounter {
 public int countLuckyMoments(String[] moments) {
  int lucky = 0;
  
  for(String s : moments) {
   StringBuffer h = new StringBuffer(s.substring(0, 2));
   StringBuffer m = new StringBuffer(s.substring(3));
   if(h.toString().equals(m.toString())) {
    lucky++;
    continue;
   }
   if(h.toString().equals(m.reverse().toString())) {
    lucky++;
    continue;
   }
   
   if((h.toString().charAt(0) == h.toString().charAt(1)) && (m.toString().charAt(0) == m.toString().charAt(1))) {
    lucky++;
   }
  }
  return lucky;
 }
 
 private static void echo(Object out) {
  System.out.println(out);
 }
}
StringBufferでreverseができるのを最近知って、使ってみたくて使ったらStringBufferはequalsが使えないの知らなくて時間が無駄にかかってしまった。
今回Rateが大幅に下がった理由はこれ。
というか俺Javaを知らなさすぎだろ・・・普通に解いたほうが早かったね・・・

500
public class Starport {
 public double getExpectedTime(int N, int M) {
  int a = gcd(N, M);
  return (double)(N - a) / 2.0;
 }
 
 private int gcd(int a, int b) {
  if(b == 0) return a;
  return gcd(b, a % b);
 }
 
 private static void echo(Object out) {
  System.out.println(out);
 }
}
式がわかればこんなに簡単にかけるのか・・・まだよく理解してない。

0 件のコメント:

コメントを投稿