• Splits CodeForces


    题意:

    我们定义一个不上升的且和为 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

    Input
    7
    Output
    4
    Input
    8
    Output
    5
    Input
    9
    Output
    5

    Note

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

    权值为 1: [7]

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

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

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

    题解:

    我们只需要输出n/2+1就行了,因为n/2就是能得到的最大权值 (除去n/1),那么比n/2小的权值肯定存在,比如(2,2,2,2,1),那么可变成(2,2,2,1,1,1),或者(2,2,1,1,1,1,1)

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<map>
     7 #include<vector>
     8 #include<math.h>
     9 #define mem(a,x) memset(a,x,sizeof(a))
    10 using namespace std;
    11 typedef long long ll;
    12 const int maxn=1e5+10;
    13 const int mod=26;
    14 const int INF=0x3f3f3f3f;
    15 const int Times = 10;
    16 const int N = 5500;
    17 int main()
    18 {
    19     ll n;
    20     while(~scanf("%I64d",&n))
    21     {
    22         printf("%I64d
    ",n/2+1);
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    如何提高沟通能力?
    如何做到科学决策?推荐你看这本《决策必读12篇》
    领导者如何让员工真心服从自己?
    MBA看什么书,MBA教材书目推荐
    有关战略管理的书,哪本最值得推荐?
    市场营销必看书籍推荐
    P1208 混合牛奶题解
    P5019 铺设道路题解
    P1728 陶陶摘苹果题解
    P1106 删数问题题解
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12678090.html
Copyright © 2020-2023  润新知