SRM 606 DIV1 Easy - EllysNumberGuessing (復習○)

問題


http://community.topcoder.com/stat?c=problem_statement&pm=12975&rd=15839

・2人でゲームを行い、一人は1~10^9までの数を思い浮かべ、
 もう一人が言った数との絶対値を答える。
・このターンを何度か繰り返したとき、最後に思い浮かべた数を返す。
 ただし、そのような数が存在しないときはー2、複数存在するときは-1を返す。


解き方


各ターンごとに存在しうる数字についてANDをとり、最後に残ったものが答えになる。

具体的には最初のターンで存在しうる2通りの数について、各ターンごとに現れるのであれば残し、なければfalseとして最後に判定すればよい。

また、最初に1~10^9内にある数か判定してあげればその後は毎回判定しなくてもよい。

単純に数を数えるコーディングや、同じセットが複数存在するときにエラーとなるコーディングではひっかかるので上記のように問題にシンプルに従って実装する。

コード


class EllysNumberGuessing {

public: int getNumber(vector<int> guesses, vector<int> answers) {
int num1=guesses[0]+answers[0];
int num2=guesses[0]-answers[0];

int flag1=0,flag2=0;
if(1<=num1&&num1<=1000000000)flag1=1;
if(1<=num2&&num2<=1000000000)flag2=1;

FORE(i,0,guesses.size()){
if(guesses[i]+answers[i]!=num1&&guesses[i]-answers[i]!=num1)flag1=0;
if(guesses[i]+answers[i]!=num2&&guesses[i]-answers[i]!=num2)flag2=0;
}

if(flag1&&flag2)return -1;
if(!flag1&&!flag2)return -2;
if(flag1)return num1;
return num2;
}

};
このエントリーをはてなブックマークに追加