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 }
什么?我的程序有问题,快拿键盘给我!