解题报告 和谐

1.        题目

和谐

harmony.pas/c/cpp

 

【问题描述】

k同学本来想给这个题套一个很好玩的背景的,但是因为一些原因(看题目名,你们懂的),这题的题面就变得非常无聊了。

对于任意四个两两不同的数,记,考虑以下6个值:,在这6个值中sum的约数个数记为这四个数的和谐度。例如0,7,2,34个数的和谐度为2.因为0+20+3是这4个数的和12的约数。

现在小k想知道两个问题:1. 如果他任意写下4个数,和谐度最大可能是多少;2. 满足并且ABCD4个数的和谐度为第1问中的值的所有四元组一共有多少组。

 

【输入格式】

输入一行2个整数LR,意义如上所述。

 

【输出格式】

输出2行,每行一个整数,分别表示2问的答案。

 

【样例输入】

harmony.in

1 30

 

【样例输出】

harmony.out

4

3

 

【样例解释】

和谐度最大只能达到4,没有和谐度超过44个数   

[1, 30]中,满足和谐度为44个数共有3组:

1.  1  5  7  11

2.  2  10  14  22

3.  1  11  19  29

 

【数据规模和约定】

对于60%的数据,;

对于100%的数据,.

 

2.        题目实质

告诉你一个秘密,这是 IMO(国际数奥)2011 的第一题。

3.        算法

和谐度最大只能达到4,没有和谐度超过44个数   -----把第一问答案就这么告你了......

暴搜后,可以发现规律(需要证明的 google 一下 IMO),满足条件的只有两种情况:k,5k,7k,11k    k,11k,19k,29k

然后,写就行了。

4.        注意事项

用公式求,不要枚举 ans (不过相信大家也没有我这么......),不然会超时。

5.        代码

小公式(SueMiller

var ll,rr,t,ans:int64;

 

begin

  assign(input,'harmony.in');reset(input);

  assign(output,'harmony.out');rewrite(output);

 

  readln(ll,rr);

  if ll>rr then begin

    writeln(4);

    writeln(0);

  close(input);close(output);

  halt;

  end;

 

  writeln(4);

  ans:=(rr div 29-ll+1)+(rr div 11-ll+1);

  if ans<0 then ans:=0;

  writeln(ans);

 

  close(input);close(output);

end.

 

 

原文地址:https://www.cnblogs.com/SueMiller/p/2213005.html