在uva 10954中获得WA [关闭]
Posted
技术标签:
【中文标题】在uva 10954中获得WA [关闭]【英文标题】:getting WA in uva 10954 [closed] 【发布时间】:2019-07-15 04:06:24 【问题描述】:让我们为它添加一些独创性。加法运算现在需要成本,而成本是要相加的两者的总和。因此,要添加 1 和 10,您需要成本 11。如果要添加 1、2 和 3。有几种方法:1 + 2 = 3,成本 = 31 + 3 = 4,成本 = 42 + 3 = 5 , cost = 53 + 3 = 6, cost = 62 + 4 = 6, cost = 61 + 5 = 6, cost = 6Total = 9Total = 10Total = 11我希望你已经明白你的使命,添加一组整数,这样成本最低。输入每个测试用例都以一个正数开始,N(2N5000) 后跟 N 个正整数(都小于 100000)。输入由 N 的值为零的情况终止。不应处理这种情况。输出对于每种情况,在一行中打印添加的最低总成本。
示例输入
3
1 2 3
4
1 2 3 4
0
样本输出
9
19
我尝试对给定数组进行排序,然后为 cumsum (CS) 取另一个数组,并将除 cs[0] 之外的所有 CS 元素求和。我正在为这种方法获取 WA,请解释一下
int n,i,hold=0;
while(1)
cin>>n;
if(n==0)break;
int arr[n],cs[n];
for(i=0;i<n;i++) cin>>arr[i];
sort(arr,arr+i);
cs[0]=arr[0];
for(i=1;i<n;i++)cs[i]=arr[i]+cs[i-1];
cs[0]=0;
int sum=0;
for(i=1;i<n;i++)sum+=cs[i];
cout<<sum<<endl;
sum=0;
输入:
9
66 85 52 22 44 1 59 88 67
0
我的出局:
1822
预期结果(udebug):
1454
获取 WA
【问题讨论】:
int arr[n],cs[n];
-- 这不是有效的 C++。
您有一个失败的测试输入。这使您比大多数提出这些问题的人领先一步。您应该做的是启动开发环境附带的调试工具,输入您的输入案例,并逐步执行程序,直到您发现程序与您的期望有偏差。这通常是一个错误。
【参考方案1】:
你的想法是错误的解决这个问题。 在获取数据结构上的所有元素后,您应该重复这 3 点: 1) 排序。 2)对第一个两个值求和,并从数据结构中删除第一个两个值 3)将总和添加到成本和数据结构中。 您可以使用 priority_queue 作为数据结构。
【讨论】:
【参考方案2】:使用最小堆并添加 2 个最小元素。示例:
1 2 3 -> 3 3 -> 6。 1 2 3 4 -> 3 3 4 -> 4 6 -> 10。
希望对你有帮助。
【讨论】:
以上是关于在uva 10954中获得WA [关闭]的主要内容,如果未能解决你的问题,请参考以下文章