码迷,mamicode.com
首页 > 其他好文 > 详细

C - Splits

时间:2020-04-10 22:35:40      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:NPU   amp   main   note   思路   put   long   out   tput   

我们定义一个不上升的且和为 n 的正整数序列,叫做 n 的分解.

比如, 下面是8的分解: [4, 4], [3, 3, 2], [2, 2, 1, 1, 1, 1], [5, 2, 1].

而这些则不是8的分解: [1, 7], [5, 4], [11, -3], [1, 1, 4, 1, 1].

一个分解的权值等于第一个数的个数. 例如, [1, 1, 1, 1, 1] 的权值是 5, [5, 5, 3, 3, 3] 的权值是 2, [9] 的权值是 1.

给定一个 n, 找到不同权值的分解的个数.

Input

第一行输入一个整数 n (1 <= n <= 10^9).

Output

输出一个整数 — 即上述问题的答案.

Examples

 1 Input
 2 7
 3 Output
 4 4
 5 Input
 6 8
 7 Output
 8 5
 9 Input
10 9
11 Output
12 5

 

Note

第一组样例,下面是可能的 7的分解的权值:

权值为 1: [7]

权值为 2: [3, 3, 1]

权值为 3: [2, 2, 2, 1]

权值为 7: [1, 1, 1, 1, 1, 1, 1]

 

思路

本题就是要求一个数可以分解为不上升的且和为 n 的正整数序列的个数。一开始想的挺复杂的,但后来列举答案的时候,发现了规律,就是如下图:

  n    个数
  1      1
  2      2
  3      2
  4      3
  5      3
  6      4
  7      4
  8      5
  9      5
  10     6
  11     6

怎样,是不是很神奇(?◇?) ,因此,代码如下:

 1 #include<stdio.h>
 2 #define ll long long
 3 
 4 int main()
 5 {
 6     ll n;
 7     scanf("%lld",&n);
 8     printf("%lld\n",n/2+1);
 9     return 0;
10 }

 

C - Splits

标签:NPU   amp   main   note   思路   put   long   out   tput   

原文地址:https://www.cnblogs.com/lovelycaier/p/12676475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!