51nod 1837 砝码称重【数学,规律】
小 Q 有 n 个砝码,它们的质量分别为 1 克、 2 克、……、 n 克。
输入包含多组测试数据。
每行对应一组测试数据,包含一个正整数 n 。
不超过 10^5 组数据,1 ≤ n ≤ 10^9。
每行对应一组测试数据,输出一个正整数表示答案。
1
5
6
0
2
1
题解:最先猜到1,3,6,10,15这些数比较特殊,都只要称一次,因为:
3=1+2,6=1+2+3,10=1+2+3+4......
然后猜想其他数应该和其组合有关,比如5=1+4和2+3,然后4里面有1+2和1+3(事实上只要124,判断1+2<4就行了),然后猜测要称的次数和最大砝码的加法组合有关(必须有一边要放一个,因为题目说要确定哪个错了,唔其实这里开始就想错了)。。然后,没猜出来。。。其中还猜想过答案只有1和2吧,但是我不会证明吖QAQ,后面越算越糊涂,弃疗。。。
不扯了,,,花个点头盾,
来看正解:(答案就是只有1和2哎。。。高斯证明过任意一个正整数可以表示成三个三角形数的和)
①如上猜想,1,3,6,10这样的三角形数k*(k+1)/2,都只要一次,选出k个数之和判断是否与n相等即可,因为任选k个数组成的最小质量和是n。
②n 等于 三角形数+1的也只要一次,与上同理,判断选出k个数是否<n即可
③当第n个三角形数是平方数时,只要一次,判断1+2+...+(k-1)=(k+1)+(k+2)+...+n是否成立,因为去掉一个砝码后能够拆分成两个质量和相同的砝码区间只有一种方案。
④当第n个三角形数是平方数+1时,只要一次,与上同理。
⑤其他情况,n,n-1,n-2中至少有一个数可以表示成两个三角形数的和,从而只需要称两次,因为小于号可以使用至多两次。
(判断一个数是不是平方数只需要将其开根下取整再平方进行检验,判断三角形数同理。)
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll n, t, k, kk;
int main() {
while(~scanf("%lld", &n)){
if(n==) {puts("");continue;}
k = sqrt(*n-);
t = n*(n+)/; kk = sqrt(t);
if(k*(k+)/ == n || k*(k+)/ + == n ||
t == kk*kk || t == kk*kk+) puts("");
else puts("");
}
return ;
}
234ms
51nod 1837 砝码称重【数学,规律】的更多相关文章
- 51nod 1449 砝码称重 (进制思想)
1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有好多种砝码,他们的重量是 w0,w1,w ...
- 51nod 1449 砝码称重(贪心算法)
题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include ...
- 51nod 1449 砝码称重【天平/进制】
题意: 给你w,n,问你在w^0,w^1,w^2...各种一个,问你能不能用这些砝码和重量为m的东西放在天平上使得天平平衡: 思路: 这个很容易联想到进制: 如果把m放在是一边的话,其实对于砝码就是纯 ...
- 51Nod 1449 砝码称重 (二进制思想)
现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组 ...
- 51nod 1449:砝码称重
1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 取消关注 现在有好多种砝码,他们的重量是 w0,w1 ...
- NOI题库--砝码称重V2(多重背包2^n拆分)
以前只会写多重背包的原版,渣的不行,为了做此题不得不学习了一下,发现其实也不难,只要理解了方法就好多了(PS:其实和倍增挺像的) 8756:砝码称重V2 总时间限制: 1000ms 内存限制: 655 ...
- Codevs No.2144 砝码称重2
2016-05-31 22:01:16 题目链接: 砝码称重2 (Codevs No.2144) 题目大意: 给定N个砝码,求称出M的重量所需砝码最小个数 解法: 贪心 使砝码数量最小,当然是每个砝码 ...
- 安徽省2016“京胜杯”程序设计大赛_A_砝码称重
砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 61 Accepted: 37 Description 小明非常喜 ...
- P2347 砝码称重-DP方案数-bitset
P2347 砝码称重 DP做法 : 转化为 01背包. 进行方案数 更新.最后统计种类. #include<bits/stdc++.h> using namespace std; #def ...
随机推荐
- CCF 201412-4 最优灌溉
问题描述 试题编号: 201412-4 试题名称: 最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很 ...
- python风味之list创建
单重for循环 >>> [x * x for x in xrange(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 单重for循环+if条件 & ...
- [转]象棋AI算法(二)
本文转自:http://blog.csdn.net/u012723995/article/details/47143569 参考文献:http://bbs.blueidea.com/thread-30 ...
- 第八章使用java实现面向对象-File I/O
java.io.File类用于表示文件(目录) File类只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问 RandomAccessFile java提供的对文件内容的访问,既可以 ...
- 文档转换为pdf格式帮助类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Word = M ...
- MySql数据库与JDBC编程二
DML语法语句:主要操作数据表中的数据,完成插入新数据,修改已有数据,删除不要的数据的任务 1,insert into 语句 用于向指定表插入数据,一次只能插入一条记录:insert into tab ...
- VS编译完成后自动复制到远程机器
缘起 最近在调试网络通信,每次一有点小修改,都要将程序从开发机复制到测试机,不胜烦扰.既然我们程序猿,为什么要那么死板呢,能够用代码解决的问题,就不要用手去解决. 解决过程 复制 手工复制外有没有其他 ...
- Java 基础(6)——关键字 & 标识符 & 转义字符
依然是基础的一天,看一看就好~ 关键字 之前就有说过关键字哦~ 注:关键字就是程序发明者规定的有特殊含义的单词. from Java基础(2) Java 中除了关键字以外还有暂时没有成为关键字的保留字 ...
- MyBatis 学习(一)
一.MyBatis 1.MyBatis 介绍(百度) MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数 ...
- 冒泡排序——Python实现
一.排序思想 排序思想参见:https://www.cnblogs.com/luomeng/p/10161794.html 二.python实现 def bubble_sort(nums): &quo ...