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

C++ 有人能告诉我为什么这超过了2秒的时间限制吗?(短代码),c++,performance,variables,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

我已经挣扎了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;
}
#包括
使用名称空间std;
int main()
{
/*freopen(“file.in”,“r”,stdin);
freopen(“file.out”,“w”,stdout)*/
long-long-int-aux,i,n,k,j,总计=0;
cin>>n>>k;
长整型a[n],b[n],阶[n];
签署的长期国际利润[n];
对于(i=0;i>a[i];
对于(i=0;i>b[i];
对于(i=0;i利润[订单[j]]
{
aux=订单[i];
订单[i]=订单[j];
顺序[j]=aux;
}
如果(k>0)
对于(i=0;icout您的代码的复杂度是O(n^2),这对于n=20000来说太高了。降低复杂度,用Qsort替换冒泡排序。尝试使用自定义比较函数进行排序。

如何使用std:sort?我不熟悉它。而且快速排序没有性能最差的场景O(n^2)也是吗?这取决于实现。当您选择随机轴元素时,它取O(n log n)。如果您愿意,您可以使用合并排序或任何复杂度为O(log n)的排序您是否分析了您的代码以确定其实际花费的时间?我该如何做?您可以从这里开始阅读:
#include
?!??不,只是不。不要这样做。请参阅感谢您让我知道第二个链接:)。您是一个英雄,但我对第一个链接一无所知。我可以请您进行必要的排序吗在我的代码中进行方法替换。我正在乞讨,如果代码是在我的上下文中编写的,那么理解代码就容易多了。请:,初学者最难的问题是知道在哪里寻找答案。当你使用快捷键(如代码)>包含< <代码>之外的链接中的问题——你不知道如何正确使用事物。例如,如果你想使用C++ <代码>矢量< /代码>,你需要<代码>包含“< /代码>正确的标题”。基于系统调用的IO,如
open()
/
read()
/
write()
——您必须学习如何识别正确的头。例如,要使用C
open()
系统调用,您可以使用
man open
命令查看
open
的手册页。