Let's define a split of n 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 n, find out the number of different weights of its splits.
The first line contains one integer n (1 ≤ n ≤ 109).
Output one integer — the answer to the problem.
7
4
8
5
9
5
简单的想。。。全是1的时候weight是n;当变成2之后可以取遍n/2之内的所有权值,而且易证,所有开头元素比2大的split的weight一定被2的取过了,所以说只用看1和2开头的就能做到“不重不漏”,又因为是非增的,所以1打头的就是全为1,weight自然就是n啦!
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int weight=n/2+1; //加的1就是全为1的情况
cout<<weight<<endl;
}
return 0;
}
1087

被折叠的 条评论
为什么被折叠?



