hdu 5802 2016 Multi-University Training Contest 6(dfs)

来源:互联网 发布:核动力印钞机 知乎 编辑:程序博客网 时间:2024/06/06 04:44
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<utility>using namespace std;#define ll long longll sum[35],q;void init(){    int i;ll res;    for(i=1,res=1;i<35;i++)    {        sum[i]=sum[i-1]+res;        res*=2;    }}ll dfs(ll p,ll step,ll s){    if(p==q) return step;    int temp=lower_bound(sum,sum+32,p-q)-sum;    if(sum[temp]==p-q) return temp+step;    int up=q-max((ll)0,p-sum[temp]);    int k=temp+max((ll)0,up-s);    return min(step+k,dfs(p-sum[temp-1],step+temp,s+1));}int main(){    ll p,t;    init();    scanf("%lld",&t);    while(t--&&scanf("%lld%lld",&p,&q)!=EOF)    {        if(q>=p) printf("%lld\n",q-p);        else printf("%lld\n",dfs(p,0,0));    }    return 0;}

0 0
原创粉丝点击