1 条题解
-
1
题目简化
构造一个长度为 的数组。
其和不大于 ,且每个数的平方的和不小于 。
可简化成一下公式:
公式 A
公式 B
题目思路
显然,巨大的数据量让此题只能 解决。
那么,构造组数要 解决只能贪心。
设想以下样例的不同解法:
输入
5 15 15
输出 A
1 1 1 1 11
输出 B
2 2 2 2 7
输出 C
1 1 1 6 6
可以自己思考一下哪个输出在公式 B 的情况下答案最大呢。
首先想要让输出更有机会满足公式 B 就必须让输出最大化。
显然,我们肯定会让以下公式成立,才可以更大化答案。
解释
假设有一组输出满足以下公式:
那么我们会发现如果但凡把其中一个数加 ,使数据满足以下公式,此输出一定更有可能满足公式 B 。
最大化答案(接解释)
那么,怎么让一组数据在公式 B 的答案最大呢?
我们可以举个例子:
例子 A
1 3 5
例子 B
1 1 7
我们发现,我们只需要最大化其中一个数,将其他数最小化即可完成题目。
综上所述,我们按照例子 B 的方法构造数据,如果可行,直接输出,否则输出 。
题目代码
#include<bits/stdc++.h> using namespace std; int main() { long long n,x,y; cin>>n>>x>>y; if((y-n+1)*(y-n+1)+(n-1)>=x && y>=n) { for(long long i=1;i<n;i++)cout<<1<<endl; cout<<y-n+1<<endl; return 0; } cout<<-1; }
数学证明
已知在 的情况下满足 。
解:设 。
$∴\forall_{1,n}\ a_i^2\le \forall_{1,n-1}1^2\ +(y-n+1)^2$
综上所述,最贪心的方法是 。
- 1
信息
- ID
- 8240
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者