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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章