51nod-1837-砝码称重
2017-10-03 14:23
183 查看
题目描述
小 Q 有 n 个砝码,它们的质量分别为 1 克、 2 克、……、 n 克。他给 i 克的砝码标上了编号 i (i = 1, 2, …, n),但是编号被人打乱了,即编号为 i 的砝码不一定是 i 克,而是 a_i 克,这里 a 指的是 1 到 n 的一个排列。
他有一杆天平,可以向天平的两侧放任意数量的砝码,通过一次称量得到两侧质量的大小关系,关系只有左侧重、一样重、右侧重三种可能。
他想知道,最坏情况下,他至少需要称量多少次,才能确定其中至少一个编号为 i 的砝码的质量是 i 克或不是 i 克。
提示:这里所谓的最坏情况是指,对于固定的、按顺序进行的称量操作,不论每次称量的结果是什么,都能完成所需完成的上述判定任务。
例如 n = 6 时,可以只称量一次,选择编号为 1、 2、 3 的砝码放在左侧,编号为 6 的砝码放在右侧。
如果天平不是平的,则可以确定存在至少一个砝码 i 不是 i 克 (i = 1, 2, 3, 6),否则编号为 6 的砝码一定是 6 克。
再例如 n = 5 时,可以只称量两次,第一次选择编号为 2、3 的砝码放在左侧,编号为 5 的砝码放在右侧,第二次选择编号为 1、4 的砝码放在左侧,编号为 5 的砝码放在右侧。
这里略去这样称量的正确性,留给做题人推导和证明。
Input
输入包含多组测试数据。每行对应一组测试数据,包含一个正整数 n 。
不超过 10^5 组数据,1 ≤ n ≤ 10^9。
Output
每行对应一组测试数据,输出一个正整数表示答案。样例
input1
5
6
output
0
2
1
题解
51nod小透明突然秒了这道题超开心der ‘ㅅ’这道题差不多就是一道找规律题 ‘ㅅ’
高斯曾经证明过 每一个正整数可以表示为3个三角形数的和
证明过程没在网上找到 想请大大帮忙证明quq
然后我们就可以发现 答案肯定是<=2的
于是分这几种情况
1、当n=1,ans=0;
2、当n为三角形数,ans=1;
3、当n为三角形数+1,ans=1;
4、当第n个三角形数为完全平方数,ans=1;
5、当第n个三角形数为完全平方数+1,ans=1;
6、其他情况ans=2;
然后贴代码quq
var n,k1,k2:longint; begin while not eof do begin readln(n); k1:=trunc(sqrt(2*n)); k2:=trunc(sqrt(2*n-2)); if n=1 then writeln(0) else if k1*(k1+1)=2*n then writeln(1) else if k2*(k2+1)=2*n-2 then writeln(1) else if sqr(trunc(sqrt(n*(n+1) div 2)))=n*(n+1) div 2 then writeln(1) else if sqr(trunc(sqrt(n*(n+1) div 2-1)))=n*(n+1) div 2-1 then writeln(1) else writeln(2); end; end.
相关文章推荐
- 51Nod-1837-砝码称重
- 51nod 1837 砝码称重 (规律)
- 51nod 1837 砝码称重
- 51nod 1449 砝码称重
- 51nod 1449 砝码称重 (进制思想)
- 51NOD 1449 砝码称重(贪心+进制思想)
- 51NOD 1449——砝码称重(贪心算法)
- 51nod 1449 砝码称重 (二进制思想)
- 51nod 1449 砝码称重【天平/进制】
- 51nod 1449 砝码称重(进制思想+贪心)
- 51nod 1449 砝码称重(经典贪心+进制)
- 51nod 1449 砝码称重
- 51Nod 1449(砝码称重)
- 51nod 1449 砝码称重(贪心算法)
- 51nod-1449-砝码称重
- 51nod 1449 砝码称重
- 1449 砝码称重 51NOD
- 51nod 1449 砝码称重(思维+进制)
- 51nod 1449 砝码称重,贪心
- 51NOD 1449 砝码称重