想不通这段哪里出了问题。。难道我没理解题目?

运行结果:9WA,1AC,可是看了好久没发现自己错在哪儿。。

#include <stdio.h>
#include <stdlib.h>
//降序排列
int cmp(const void* a,const void* b){
    return *(int *)b-*(int *)a;
}
int main(int argc, char* argv[])
{
    int N,i;
    long sum=0;
    scanf("%d",&N);
    int data[N];
    //输入b,d,c,a....(设a<b<c<d<...)
    for(i=0;i<N;i++){
        scanf("%d",&data[i]);
    }
    //排序,现在data是...,d,c,b,a
    qsort(data,N,sizeof(int),cmp);
    //相加,sum=(d+c+b+a)+(c+b+a)+(b+a)+a=d+2c+3b+4a
    for(i=0;i<N;i++){
        sum+=data[i]*(i+1);
    }
    //题目要求的是(d+c+b+a)+(c+b+a)+(b+a)=d+2c+3b+3a,
    //所以减去一个a
    sum-=data[N-1];
    printf("%ld",sum);
    return 0;
}

1 条评论

  • @ 2018-02-11 17:44:32

    不好意思。。是我智障了,没反应过来最优的含义

    • @ 2018-02-19 16:46:41

      什么意思?
      能详细说明一下最优的含义吗

    • @ 2018-03-22 19:28:06

      @MATSUYAMA: 每次取出后应该重新排序。这题后来用C++过了,C语言的qsort总是超时:)

  • 1

信息

ID
1097
难度
6
分类
贪心 点击显示
标签
递交数
23906
已通过
6330
通过率
26%
被复制
41
上传者