题目连接:uva 10560 - Minimum Weight

题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝码測量。

解题思路:重量为1的砝码肯定要选,它能够表示到1的重量,那么下一个砝码的重量肯定选择3(2∗1+1),这样1,3分别能够用一个砝码表示,而2,4分别为3-1和3+1,这样1~4的重量也都能够表示。于是有公式ai=si−1∗2+1。

#include <cstdio>
#include <cstring>
#include <vector> using namespace std;
typedef unsigned long long ll; ll n, S;
vector<ll> ans; void init (ll n) {
S = 0;
ans.clear(); while (S < n) {
ll u = S * 2 + 1;
ans.push_back(u);
S += u;
}
printf("%lu", ans.size());
for (int i = 0; i < ans.size(); i++)
printf(" %lld", ans[i]);
printf("\n");
} void solve () {
ll k, s = S;
scanf("%lld", &k); int sign = 1, flag = 0;
for (int i = ans.size() - 1; i >= 0; i--) {
ll t = (s - 1) / 3; s -= ans[i];
// printf("%lld %lld %lld\n", ans[i], s, k);
if (k <= t)
continue; if (flag)
printf("%c", sign > 0 ? '+' : '-'); if (k < ans[i]) {
sign *= -1;
k = ans[i] - k;
} else {
k = k - ans[i];
}
flag = 1;
printf("%lld", ans[i]);
}
printf("\n");
} int main () {
int k;
while (scanf("%lld%d", &n, &k) == 2 && n + k) {
init(n);
for (int i = 0; i < k; i++)
solve();
}
return 0;
}

uva 10560 - Minimum Weight(数论)的更多相关文章

  1. UVA.10791 Minimum Sum LCM (唯一分解定理)

    UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...

  2. 数论-质因数(gcd) UVa 10791 - Minimum Sum LCM

    https://vjudge.net/problem/UVA-10791/origin 以上为题目来源Google翻译得到的题意: 一组整数的LCM(最小公倍数)定义为最小数,即 该集合的所有整数的倍 ...

  3. UVA 10627 - Infinite Race(数论)

    UVA 10627 - Infinite Race option=com_onlinejudge&Itemid=8&page=show_problem&category=516 ...

  4. uva 10555 - Dead Fraction)(数论)

    option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...

  5. UVA 11754 - Code Feat(数论)

    UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题, ...

  6. UVA 718 - Skyscraper Floors(数论)

    UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电 ...

  7. uva 10692 - Huge Mods(数论)

    题目链接:uva 10692 - Huge Mods 题目大意:给出一个数的次方形式,就它模掉M的值. 解题思路:依据剩余系的性质,最后一定是行成周期的,所以就有ab=abmod(phi[M])+ph ...

  8. UVA 12009 - Avaricious Maryanna(数论)

    UVA 12009 - Avaricious Maryanna 题目链接 题意:给定一个n.求出n个数位组成的数字x,x^2的前面|x|位为x 思路:自己先暴力打了前几组数据,发现除了1中有0和1以外 ...

  9. uva 11728 - Alternate Task(数论)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/36409469 option=com_onli ...

随机推荐

  1. DNN - Modules - QR Code Generator

    Dotnetnuke 平台上的二维码模块.支持DNN 7.x平台的安装 QR码(快速响应码)是二维条形码.随着移动设备市场正以快速的步伐,QR码正在成为非常重要的营销工具.与移动电话或平板电脑的扫描, ...

  2. ORACLE SQL单行函数(三)【weber出品必属精品】

    16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...

  3. 前端/html5效果收藏

    H5应用 9款漂亮的H5效果 8款漂亮的H5效果 36漂亮的button效果 颜色RGB表 省市二级联动

  4. strcmp和==比较

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/cpp_strcmp.html #include <stdio.h> # ...

  5. c++模板类被继承时他的成员不能被子类看到

    c++模板类被继承时他的成员不能被子类看到,必须用限定的符号 this->foo  或者 baseclass::foo,或者using bassclass::foo. msvc不提示错误,gcc ...

  6. 逆波兰表达式 java

    描述  逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系, 也不必用括号改变运算次序,例如(2 + 3) ...

  7. Linux 挂载iso,并设置为源

    ubuntu在安装lsb-core时需要从 /media/cdrom中查找源,无奈我机器的光驱被我换为硬盘了,无法安装光盘,只有在网上下载的iso文件在硬盘中,所以把iso挂载到它要查找位置 执行: ...

  8. Linux定时任务命令crontab

    作为一个php码农,linux接触总是很少,但又是必须会的一项技能,今天学到的linux命令是crontab命令. 注:以下总结基于Ubuntu 12.04 去/etc目录下看看 先去Ubuntu的/ ...

  9. Linux_jdk path (execute and install)

    作者:潇湘隐者 出处:http://www.cnblogs.com/kerrycode/ 1:echo $JAVA_HOME 使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$ ...

  10. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...