题目地址:http://codeforces.com/problemset/problem/964/A
题目:
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]
题目大意:
比如7,它可以分成1个7,这时,序列中最多只有一个相同的数字。也可以是3,3,1,这时,序列中最多有两个相同的数字。求一共有几个最多相同数字不同的序列。
思路:一开始想着用set,先考虑只有1组成的序列,比如数字7/1=7,把7放入set。7/2=3,7-3=4,max(3,4),我们知道set内是不含相同的数字的,所以循环一遍后输出set的长度就好。但是超时了。
这说明,这题目比想象的更简单。还是拿7来打比方,先是可以分成1111111,把前两个1合成2,所以有211111,再31111,这样下来,只要求1的个数就好,那么每个数字最多也不过n/2+1个1.所以代码就很简单了。
代码:
#include<iostream> using namespace std; int main() { long long int n; while(cin>>n) { cout<<n/2+1<<endl; } return 0; }