個人的には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 件のコメント:
コメントを投稿