【问题标题】:Codeforces 13C SolutionCodeforces 13C 解决方案
【发布时间】:2016-02-15 18:39:28
【问题描述】:

http://codeforces.com/problemset/problem/13/C 我遇到了上述问题。任何人都可以清楚地解释解决方案。我的代码对我来说似乎还不错,但是它没有通过测试用例 8。

lli n;
cin>>n;
lli arr[size];
fi(i,n)
cin>>arr[i];
if(n==1)
    cout<<"0"<<endl;
else
{
    lli sum=0;
    for(lli i=n-1; i>0; i--)
    {
        if(arr[i]<arr[i-1])
        {
            lli k=abs(arr[i]-arr[i-1]);
            if(i==(n-1))
            {
                arr[i]+=k;
                sum+=k;
            }
            else
            {
                if((arr[i]+k)<=arr[i+1])
                    arr[i]+=k, sum+=k;
                else
                    arr[i-1]-=k, sum+=k;
            }
        }
    }
    cout<<sum<<endl;
}

【问题讨论】:

  • 什么是测试用例 8?
  • 5000 960440941 -427665346 366632330 -922577959 -708929687 592187815 -119993724 -818916365 -808029838 306092723 916069264 -21931800 609160933 -699461833 -978359151 629415472 -354990986 -965311699 -137369406 -583707511 -948526279 867343453 -421546982 -2873... codeforces.com/problemset/status/13/problem/C
  • lli类型的最大值是多少?是32位还是64位?
  • 我将 lli 输入到long long int 并运行了你的程序。在我的 ubuntu 机器中 long long int 是 64 位。所以,我得到了 18203564911 的正确答案。我还在每次迭代时打印了 sum 和 k 的值,并且它匹配。如果您为 lli 使用了正确的类型(即它不应该溢出),我看不出您的代码有任何问题。
  • 正确答案是 2527130128540。请参阅评论中提供的链接。我也得到了相同的输出。我想不出任何问题..

标签: c++ sorting dynamic-programming


【解决方案1】:

程序比较arr[i]是否小于arr[i-1],在10000 1 1 1这样的情况下可能会失败。

O(n) 的解决方案是求平均值并将每个数字更改为平均数字。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2013-07-22
    • 2016-11-01
    相关资源
    最近更新 更多