2014年1月12日日曜日

SRM 604 Div2 Easy/Medum

990->1075 (+85) でした。(ベストスコア) 

個人的にはchallengeも成功したので面白い回でした。

SRM 604 Div2 Easy FoxAndWord

一瞬間に合うか心配でしたが、O(50^3) なので大丈夫そうです。

substringで並び替えて一致してるかチェックしてるだけです。


 一応こうすると、文字数のチェックもしなくてもいいです。
public int howManyPairs(String[] words)
 {
  int count = 0;
  for (int i = 0; i < words.length; i++) {
   for (int j = i + 1; j < words.length; j++) {
    if (check(words[i], words[j])) {
     count++;
    }
   }
  }
  return count;
 }

 private boolean check(String s, String s2) {
  for (int i = 1; i < s.length(); i++) {
   if (s2.equals(s.substring(i) + s.substring(0, i))) {
    return true;
   }
  }
  return false;
 }

SRM 604 Div2 Medium PowerOfThreeEasy


3進数に直して、(途中で2の数が出てくるとダメ) ビットっぽいのを求めて

ビットが重なっているか判定して、さらにビットが連続してるかどうか見ます。



 private static final String POSSIBLE = "Possible";
 private static final String IMPOSSIBLE = "Impossible";

 public String ableToGet(int x, int y)
 {
  int bitsX = get3Bits(x);
  int bitsY = get3Bits(y);
 if (bitsX == -1 || bitsY == -1) {
   return IMPOSSIBLE;
  }
  if ((bitsX & bitsY) > 0) {
   return IMPOSSIBLE;
  }
  int orBits = bitsX | bitsY;
  while (orBits > 0) {
   if ((orBits & 1) == 0) {
    return IMPOSSIBLE;
   }
   orBits >>= 1;
   
  }
  return POSSIBLE;
 }

 int get3Bits(int num) {
  int p = 0;
  int result = 0;
  while (num > 0) {
   if (num % 3 == 2) {
    return -1;
   }
   result |= (num % 3) << p;
   num /= 3;
   p++;
  }
  return result;
 }

0 件のコメント:

コメントを投稿