码迷,mamicode.com
首页 > 其他好文 > 详细

CF1130E Wrong Answer

时间:2019-03-09 13:02:03      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:fun   [1]   c++   一个   UNC   std   amp   contain   f11   

构造题+数学

题意是要求一个序列中最大的∑(i>=l且i<=r) (r-l+1)*a[i]的值,题目给出代码,要你hack这份代码,使他的答案与正确答案相差k

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

考虑在第一个数放一个负数-1,之后的1999个数之和为sum,

则他代码的答案为 sum*1999

正确答案为 (sum-1)*2000

所以 (sum-1)*2000-sum*1999=k

化简得 sum=k+2000

之后将sum均分个之后的1999个数即可

 

#include <bits/stdc++.h>
using namespace std;
int k,sum;
int main()
{
    scanf("%d",&k);
    sum=k+2000;
    printf("2000\n");
    int t,h;
    t=sum/1998;
    h=sum-1998*t;
    printf("-1 ");
    for (int i=1;i<=1998;i++)
      printf("%d ",t);
    printf("%d\n",h);
}

 

CF1130E Wrong Answer

标签:fun   [1]   c++   一个   UNC   std   amp   contain   f11   

原文地址:https://www.cnblogs.com/huangchenyan/p/10500273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!