CF1130E Wrong Answer

E Wrong Answer

  • 注意到 (ngeq 2) 时才可能有解,可以按如下方式构造一个 (a_{1,2dots n}):
  • (a_1=-1) ,而后面的数都为正.记 (s=sum_{i=2}^{n} a_i),显然题目中的程序给出的答案是 (s*(n-1)) .
  • 为使这个答案比正确答案少 (k) ,那么正确答案只能是 ((s-1)*n).

[s(n-1)+k=(s-1)n\ s=k+n ]

  • 由于我们可以放 (1)(-1) , (1999)(10^6),此时 (s-n=1999*10^6-2000>10^9) ,所以按照上述方法一定可以构造出一组解.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
	int x=0;
	bool pos=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar())
		if(ch=='-')
			pos=0;
	for(;isdigit(ch);ch=getchar())
		x=x*10+ch-'0';
	return pos?x:-x;
}
const int delta=1e6-1;
int ans[2019],n=0;
int main()
{
	int k=read();
	++k;
	ans[++n]=-1;
	while(k>=delta)
		{
			k-=delta;
			ans[++n]=delta+1;
		}
	ans[++n]=k+1;
	cout<<n<<endl;
	for(int i=1;i<=n;++i)
		cout<<ans[i]<<' ';
	return 0;
}
原文地址:https://www.cnblogs.com/jklover/p/10429684.html