谁能告诉我为什么这超过了2秒的时间限制?(短代码)

时间:2017-04-04 12:38:39

标签: c++ performance variables

我已经苦苦挣扎了2天。请问,有谁可以告诉我为什么它超过了我之后用作输入20000和0和40000数字的时间限制?我试图使变量类型尽可能大,但这似乎也没有帮助。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    /*freopen("file.in", "r", stdin);
    freopen("file.out", "w" , stdout);*/
    long long int aux,i, n, k, j, total = 0;
    cin >> n >> k;
    long long int a[n], b[n], order[n];
    signed long long int profit[n];
    for(i = 0; i < n; i++)
        cin >> a[i];
    for(i = 0; i < n; i++)
        cin >> b[i];
    for(i = 0; i < n; i++)
        profit[i] = a[i] - b[i];
    for(i = 0; i < n; i++)
        order[i] = i;
    for(i = 0; i < n; i++)
        for(j = i + 1; j < n; j++)
            if(profit[order[i]] > profit[order[j]])
            {
                aux = order[i];
                order[i] = order[j];
                order[j] = aux;
            }
    if(k > 0)
        for(i = 0; i < k; i++)
        {
            total += a[order[i]];
        }

    for(i = k; i < n; i++)
    {
        if(profit[order[i]] < 0)
            total += a[order[i]];
        else
            total += b[order[i]];
    }
    cout << total;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

代码的复杂性为O(n ^ 2),对于N = 20000而言太多了。降低复杂性,用Qsort替换冒泡排序。尝试使用自定义比较功能std::sort