51nod 1837 砝码称重
来源:互联网 发布:touch bar 知乎 编辑:程序博客网 时间:2024/05/02 02:18
原地址:http://blog.csdn.net/qq_28954601/article/details/78151199
最坏情况就是每次称量的结果都和把
显然答案不会超过
实际上答案最大是
- 当
n 是三角形数时(即n=k(k+1)2 ),只需一次,称量1+2+⋯+k=n 是否成立,因为任选k 个砝码能组成的最小质量和是n 。 - 当
n 是三角形数+1 时(即n=k(k+1)2+1 ),只需一次,称量1+2+⋯+k<n 是否成立,原因类似于上一个结论。 - 当第
n 个三角形数是平方数时(即n(n+1)2=k2 ),只需一次,称量1+2+⋯+(k−1)=(k+1)+(k+2)+⋯+n 是否成立,因为去掉一个砝码后能够拆分成两个质量和相同的砝码区间只有一种方案。 - 当第
n 个三角形数是平方数+1 时(即n(n+1)2=k2+1 ),只需一次,称量1+2+⋯+(k−1)<(k+1)+(k+2)+⋯+n 是否成立,原因类似上一个结论。 - 其他情况,不难证明
n,n−1,n−2 之中至少有一个数可以表示成两个三角形数的和,从而只需要称两次,因为小于号可以使用至多两次。
判断一个数是不是平方数只需要将其开根下取整再平方进行检验,判断三角形数同理。
#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;typedef long long ll;const int MAXN = 1000010;const int INF = 1000000000;int _w;int a[MAXN], sz;void prelude() {int s = 1;for( int i = 2; s < INF; s += i, ++i )a[sz++] = s, a[sz++] = s+1;sort(a, a+sz);sz = int(unique(a, a+sz) - a);}int main() {int n;prelude();while( scanf( "%d", &n ) != -1 ) {if( n == 1 ) puts("0");else if( *lower_bound(a, a+sz, n) == n ) puts("1");else {ll t = (ll)n*(n+1)/2;ll sq = ll(sqrt(t) + 0.5);puts( sq*sq == t || sq*sq+1 == t ? "1" : "2" );}}return 0;}
阅读全文
0 0
- 51nod 1837 砝码称重
- 51nod-1837-砝码称重
- 51Nod-1837-砝码称重
- 51Nod 砝码称重
- 51nod 1837 砝码称重 (规律)
- 51nod 1449:砝码称重
- 51nod 1449 砝码称重
- 51nod 1449 砝码称重
- [51nod 1449]砝码称重
- 51NOD 1449 砝码称重
- 51nod 1449 砝码称重
- 51nod 1449 砝码称重
- 1449 砝码称重 51NOD
- 51nod-1449-砝码称重
- 51Nod-1449-砝码称重
- 51nod 1449 砝码称重【天平/进制】
- 51nod 1449 砝码称重【进制数思维】
- 51nod 1449 砝码称重,贪心
- leetcode 331. Verify Preorder Serialization of a Binary Tree 二叉树的前序序列验证
- 小白的第一篇博客
- java内部类
- 解决Visual Studio编译错误"文本后缀无效; 未找到文文本运算符或文本运算符模板"
- 贪心法 求最大子阵列
- 51nod 1837 砝码称重
- Leetcode之Permutation in String 问题
- 线程
- SQL完整性约束
- UVA 469 Wetlands of Florida
- static和extern对函数的作用
- 机器学习第3章第5节 : 调整图像亮度
- 哈希查找
- Oracle 使用技巧