为什么会超时

#include<cmath>
#include<math.h>
#include<ctype.h>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cerrno>
#include<cfloat>
#include<ciso646>
#include<climits>
#include<clocale>
#include<complex>
#include<csetjmp>
#include<csignal>
#include<cstdarg>
#include<cstddef>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cwchar>
#include<cwctype>
#include<deque>
#include<exception>
#include<fstream>
#include<functional>
#include<iomanip>
#include<ios>
#include<iosfwd>
#include<iostream>
#include<istream>
#include<iterator>
#include<limits>
#include<list>
#include<locale>
#include<map>
#include<memory>
#include<new>
#include<numeric>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<stdexcept>
#include<streambuf>
#include<string>
#include<typeinfo>
#include<utility>
#include<valarray>
#include<vector>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

const int inf=2147483647;

int n;
int a[11111];
int ans;
set<int> st;

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",a+i);
        st.insert(a[i]);
    }
    
    for(int _=1;_<n;_++)
    {
        int a=*st.begin();
        st.erase(st.begin());
        int b=*st.begin();
        st.erase(st.begin());
        ans+=a+b;
        st.insert(a+b);
    }
    
    printf("%d\n",ans);
    
    return 0;
}

4 条评论

  • @ 2017-08-02 17:15:10

    。。看不懂
    但是为什么要set
    stl少用比较好

  • @ 2017-08-02 16:16:42

    你没有把原来合并的堆给删除,反而有insert(a+b),使得set里面的数据越来越多。虽然你有n限制,但是如果你把合并之后的水果堆删除了,就要快一半而不用处理全部的n个数据。

    • @ 2017-08-02 18:28:40

      怎么没看懂您的解释。。。其实我也不明白LZ为什么超时

  • @ 2017-07-06 14:53:49

    开了O2的set是O(1)的(逃

  • @ 2017-07-06 14:44:52

    你有试过不用这么多头文件么?还有有的stl本身很慢的。

  • 1

信息

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