Codeforces 964A Splits

最近写了几场cf的题, 各种浑水摸鱼过一道就跑导致分数低到令人发指,也并不知道自己都写了些什么, 遂总结一下这几次的题目回忆一下。
                                                                                                                                                                      以上。
Description:

Let's define a split of nn as a nonincreasing sequence of positive integers, the sum of which is n.

For example, the following sequences are splits of 8: [4,4] [3,3,2][2,2,1,1,1,1][5,2,1].

The following sequences aren't splits of 8: [1,7][5,4], [11,3][1,1,4,1,1].

The weight of a split is the number of elements in the split that are equal to the first element. For example, the weight of the split [1,1,1,1,1] is 5, the weight of the split [5,5,3,3,3] is 2 and the weight of the split [9] equals 1.

For a given nn, find out the number of different weights of its splits.

Input

The first line contains one integer n (1n109).

Output

Output one integer — the answer to the problem.

Examples
Input
7
Output
4
Input
8
Output
5
Input
9
Output
5
Note

In the first sample, there are following possible weights of splits of 7:

Weight 1: [7]

Weight 2: [3, 3, 1]

Weight 3: [2, 2, 2, 1]

Weight 7: [1, 1, 1, 1, 1, 1, 1]

 
  
  


题目大意:
给一个整数n,统计n有多少种不同题目所要求的拆分。 所谓拆分指某组数和为n, 且它们按照降序排序后第一个元素的个数。统计有多少组满足条件的数组(第一个元素个数必须不同)。
解题思路:

逆向思维, 我们从底层开始往上推, 从全1开始,每次合并两个1,直到全部为2。 那么些写现在我们其实可以知道这道题只用计算2的个数即可。
代码:

#include <iostream>
#include <sstream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <utility>
#include <string>
#include <cmath>
#include <vector>
#include <bitset>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
using namespace std;

/*tools:
*ios::sync_with_stdio(false);
*freopen("input.txt", "r", stdin);
*/

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int dir[9][2] = { 0, 1, 0, -1, 1, 0, -1, 0, 1, 1, 1, -1, -1, 1, -1, -1, 0, 0 };
const int inf = 0x3f3f3f;
const double pi = acos(-1.0);
const int mod = (ll) 1e9 + 7;
const int Max = (int) 1e5 + 51;
const ld eps = 1e-10;
int n;
int num;
int main() {
    while (~scanf("%d", &n)) {
        num = n / 2;
        printf("%d\n", num + 1);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章