您的位置:首页 > 其它

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

每行对应一组测试数据,输出一个正整数表示答案。

样例

input

1

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: