您的位置:首页 > 其它

HDU 5747 Aaronson(贪心)

2016-07-25 09:38 288 查看
Description

给出两个整数n和m,求方程

的所有非负解中

的最小值

Input

第一行一个整数T表示用例组数,每组用例占一行包括两个整数n和m

(1<=T<=10^5,0<=n,m<=10^7)

Output

对于每组用例,输出方程所有非负解中

的最小值

Sample Input

10

1 2

3 2

5 2

10 2

10 3

10 4

13 5

20 4

11 11

12 3

Sample Output

1

2

2

3

2

2

3

2

3

2

Solution

贪心,尽可能使用下标较大的x

Code

#include<cstdio>
#include<iostream>
using namespace std;
#define maxn 111
int T,n,m,a[maxn],res,num;
void deal(int x)
{
res=num=0;
while(x)
{
a[res++]=x%2;
num+=x%2;
x/=2;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
deal(n);
if(m>=res-1)printf("%d\n",num);
else
{
deal(n%(1<<m));
printf("%d\n",(n>>m)+num);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: