SRM 526.5 DIV1 Easy - MagicCandy

問題


http://community.topcoder.com/stat?c=problem_statement&pm=11706&rd=14762

解き方


普通に計算していては間に合わない。
例えば20個のキャンディーからは
20-4=16→16-4=12→12-3=9→9-3=6→6-2=4→4-2=2→2-1=1となり、
この操作を逆にたどれば計算量が間に合う。

つまり、ある数からそのsqrtを引かれると次の数になる計算式を
逆にたどっていけばよい。

コード


class MagicCandy {

public:

int rec(int n){
if(n==1)return 1;

int candy=rec(n-(int)sqrt(n));

int low=1,high=n;
while(low<high){
int mid=(low+high)/2;
if(mid-(int)sqrt(mid)>=candy)high=mid;
else low=mid+1;
}

return high;
}


int whichOne(int n) {
return rec(n);
}

};

Share this

Related Posts

Previous
Next Post »