SRM 478 DIV1 Easy - CarrotJumping

問題


http://community.topcoder.com/stat?c=problem_statement&pm=11022&rd=14187

解き方


4x*3を3回繰り返したときに8x+7の2回繰り替えしたものと一致するため
探索回数は最大300000回となる。

この回数であれば全探索可能であるので、すべての点を調べればよい。

BFSを使えばキューのため更新箇所はつねに最短となるため、
各位置での値の更新は不要となる。

コード


map<long long,int> m;

class CarrotJumping {

public: int theJump(int init) {
int MOD=1000000007;
m.clear();
m[init]=0;

queue<long long> q;
q.push(init);

while(!q.empty()){
long long x=q.front();
q.pop();
if(m[x]>100000||x==0)break;

if(m.find((x*4+3)%MOD)==m.end()){
q.push((x*4+3)%MOD);
m[(x*4+3)%MOD]=m[x]+1;
}
if(m.find((x*8+7)%MOD)==m.end()){
q.push((x*8+7)%MOD);
m[(x*8+7)%MOD]=m[x]+1;
}
}

return m[0]>100000||m[0]==0 ? -1 : m[0];
}

};

Share this

Related Posts

Previous
Next Post »