E. Wrong Answer

探讨了在给定数组中寻找特定子数组和的问题,通过对比一个快速但不完全正确的贪婪算法与正确解法,展示了如何构造特定序列使两者答案相差指定值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

E. Wrong Answer
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Consider the following problem: given an array aa containing nn integers (indexed from 00 to n1n−1), find max0lrn1lir(rl+1)aimax0≤l≤r≤n−1∑l≤i≤r(r−l+1)⋅ai. In this problem, 1n20001≤n≤2000 and |ai|106|ai|≤106.

In an attempt to solve the problem described, Alice quickly came up with a blazing-fast greedy algorithm and coded it. Her implementation in pseudocode is as follows:


function find_answer(n, a)
# Assumes n is an integer between 1 and 2000, inclusive
# Assumes a is a list containing n integers: a[0], a[1], ..., a[n-1]
res = 0
cur = 0
k = -1
for i = 0 to i = n-1
cur = cur + a[i]
if cur < 0
cur = 0
k = i
res = max(res, (i-k)*cur)
return res

Also, as you can see, Alice's idea is not entirely correct. For example, suppose n=4n=4 and a=[6,8,7,42]a=[6,−8,7,−42]. Then, find_answer(n, a) would return 77, but the correct answer is 3(68+7)=153⋅(6−8+7)=15.

You told Alice that her solution is incorrect, but she did not believe what you said.

Given an integer kk, you are to find any sequence aa of nn integers such that the correct answer and the answer produced by Alice's algorithm differ by exactly kk. Note that although the choice of nn and the content of the sequence is yours, you must still follow the constraints earlier given: that 1n20001≤n≤2000 and that the absolute value of each element does not exceed 106106. If there is no such sequence, determine so.

Input

The first and only line contains one integer kk (1k1091≤k≤109).

Output

If there is no sought sequence, print "-1".

Otherwise, in the first line, print one integer nn (1n20001≤n≤2000), denoting the number of elements in the sequence.

Then, in the second line, print nn space-separated integers: a0,a1,,an1a0,a1,…,an−1 (|ai|106|ai|≤106).

Examples
input
Copy
8
output
Copy
4
6 -8 7 -42
input
Copy
612
output
Copy
7
30 -12 -99 123 -2 245 -300
Note

The first sample corresponds to the example given in the problem statement.

In the second sample, one answer is n=7n=7 with a=[30,12,99,123,2,245,300]a=[30,−12,−99,123,−2,245,−300], in which case find_answer(n, a)returns 10981098, while the correct answer is 17101710.

 

 

转载于:https://www.cnblogs.com/yfr2zaz/p/10428869.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值