Let's define a split of nn as a nonincreasing sequence of positive integers, the sum of which is nn.
For example, the following sequences are splits of 88: [4,4][4,4], [3,3,2][3,3,2], [2,2,1,1,1,1][2,2,1,1,1,1], [5,2,1][5,2,1].
The following sequences aren't splits of 88: [1,7][1,7], [5,4][5,4], [11,−3][11,−3], [1,1,4,1,1][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][1,1,1,1,1] is 55, the weight of the split [5,5,3,3,3][5,5,3,3,3] is 22 and the weight of the split [9][9] equals 11.
For a given nn, find out the number of different weights of its splits.
The first line contains one integer nn (1≤n≤1091≤n≤109).
Output one integer — the answer to the problem.
7
4
8
5
9
5
In the first sample, there are following possible weights of splits of 77:
Weight 1: [77]
Weight 2: [33, 33, 1]
Weight 3: [22, 22, 22, 1]
Weight 7: [11, 11, 11, 11, 11, 11, 11]
题意:把一个数拆成非增的序列,拆分成的序列的权值是序列第一个数字的个数。
思路:任意一个数拆分成尽量多的2,比如7可以拆分成[2,2,2,1],这是非全1的时候的最大权值,然后依次把2拆分成1就能使权值变小,即[2,2,1,1,1] [2,1,1,1,1,1],再加上一个全1就是所求。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
int main()
{
int n,i,ans;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",(n/2)+1);
}
return 0;
}