FZU 2147 A-B Game

来源:互联网 发布:mab软件 编辑:程序博客网 时间:2024/06/04 23:19

H - A-B Game

题目链接

题目大意:输入两个长整型的数a,b。有一种将a变化的操作为:a=a-(a%x),   其中   1<=x<=a-1;

问最少有多少次操作才能使得a<=b。

思路:贪心

因为每次操作a=a-(a%x),1<=x<=a-1,要是操作数最好,那么每次a-(a%x)应该最小。

看如下变形:因为a%x=a-(a/x)*x,   则a-(a%x)=(a/x)*x;要使其最小,x=a/2+1时,(a/x)*x最小。

/**   author:liuwen*///#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>#include <climits>#include <queue>#include <stack>#include <map>#include <vector>#include <algorithm>using namespace std;int main(){    //freopen("in.txt","r",stdin);    int T,cas=0;    scanf("%d",&T);    while(T--){        long long a,b,x;        cin>>a>>b;        int tot=0;        while(a>b){            tot++;            x=a/2+1;            a=(a/x)*x;        }        cout<<"Case "<<++cas<<": "<<tot<<endl;    }    return 0;}


0 0