【HDOJ】【BestCoder Round #84】1001 Aaronson

来源:互联网 发布:数码宝贝网络侦探bgm 编辑:程序博客网 时间:2024/04/30 12:23

问题描述

给出一个不定方程x 0 +2x 1 +4x 2 +...+2 m x m =n , 找出一组解(x 0 ,x 1 ,x 2 ,...,x m ) , 使得 i=0 m x i  ​​最小, 并且每个x i  (0im) 都是非负的.

输入描述

输入包含多组数据, 第一行包含一个整数T(1T10 5 ) 表示测试数据组数. 对于每组数据:
第一行包含两个整数n m(0n,m10 9 ) .

输出描述

对于每组数据, 输出 i=0 m x i  ​​的最小值.

Solution 

题目有一个补充条件,x 为整数

很容易看出来这就是个二进制拆分的问题,二进制为1 的位x 对应为1 ,如果超出了2 m  的部分就用2 m  去补,很明显会比用更小的去填要好。

#include<stdio.h>int main(){    int T,n,m,ans;    scanf("%d",&T);    while (T--)    {        scanf("%d%d",&n,&m);        for (ans=0;n && m;n>>=1,m--) ans+=(n & 1);        ans+=n;        printf("%d\n",ans);    }} 
0 0
原创粉丝点击