C - Splits

Posted lovelycaier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - Splits相关的知识,希望对你有一定的参考价值。

我们定义一个不上升的且和为 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/2+1);
 9     return 0;
10 }

 

以上是关于C - Splits的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: n_splits=10 不能大于每个类的成员数

Android Gradle 插件 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )

Android Gradle 插件Splits 配置 ④ ( Splits#language{} 脚本块配置 | 根据语言进行分包 | LanguageSplitOptions 配置简介 )

Android Gradle 插件Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )

Android Gradle 插件 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )

HDFS 块和 Input Splits 的区别与联系