wordpress如何修改行距/网站优化公司上海
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;
}