Run ID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
6696511 | kingpro | 1032 | Accepted | 240K | 0MS | C++ | 283B | 2010-04-06 20:55:40 |
1
#include
<
iostream
>
2 using namespace std;
3 int main()
4 {
5 int N = 0 , n = 0 , ss = 5 ; cin >> N;
6 for (n = 4 ; (ss += n) <= N; n ++ );
7 for ( int leave = N - ss + 2 , p = (leave >= 0 ? 1 : 0 ), q = leave + (leave >= 0 ? 0 : n - 2 ), sep = p + n - q - 1 , x = n + p, i = 2 + p; i < x && (cout << (i > sep ? i + 1 : i) << " " , true ); i ++ );
8 return 0 ;
9 }
2 using namespace std;
3 int main()
4 {
5 int N = 0 , n = 0 , ss = 5 ; cin >> N;
6 for (n = 4 ; (ss += n) <= N; n ++ );
7 for ( int leave = N - ss + 2 , p = (leave >= 0 ? 1 : 0 ), q = leave + (leave >= 0 ? 0 : n - 2 ), sep = p + n - q - 1 , x = n + p, i = 2 + p; i < x && (cout << (i > sep ? i + 1 : i) << " " , true ); i ++ );
8 return 0 ;
9 }
引用某博客:
最大的困难是读题,罗嗦了一大堆,其实就是一道找对于序列{ak},满足各元素互不相同,和为n,且该序列各项乘积最大.
容易得出满足条件序列的几个性质:
1.4>a1>1
2.a[i+1]-a[i]<=2(假设该序列按升序排列)
3.a[i+1]-a[2]=2的情况最多有1个
具体证明略.
由此可以轻松构造出该序列:
1.从2开始累加,直到和m大于等于n
2.j=m-n,把序列中的j划去(当j=1时,划去2并将最后一个元素加1)
说实话题目我也没有看懂...
只能看了别人的解题报告 自己实现下...郁闷