H - 和与积 机智题

                      H - 和与积

题目抽象:构造N个正数(每个数不超过1000000),使所有数的和与所有数的积相差刚好等于D,按非递减序输出.  (2<=N<=1000,D<=1000)

分析:我们可以想象,当有一定的数 >= 2 时,而n又比较大时,积会远远大于和.而差却只<=1000.  所以我们构造的数应该使积非常的小.

我们可以另其中的很多数为1.如果另前面n -1 个数为1,那么an = sigma(ai) (1<=i<=n -1) + an + d.显然不行.

现在另前面 n - 2 个数为1,a[n-1]为2. 那么有 n + a[n] = sigma(a[i]) ; 又有 2 * a[n] = sigma(a[i]) + d;得到a[n] = n + d.>=2 满足提议.

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <cstring>
 5 using namespace std;
 6 typedef long long LL;
 7 const double EXP = 1E-8;
 8 const int INF = 0X5FFFFF;
 9 const int MS = 105;
10 
11 int main() {
12     int n,d;
13     while (scanf("%d%d", &n, &d) != EOF) {
14         for (int i = 0; i < n - 2; i++)
15             printf("1 ");
16         printf("2 %d\n",n + d);
17     }
18     return 0;
19 }

 

posted on 2015-08-27 19:10  hutaishi  阅读(145)  评论(0编辑  收藏  举报

导航