C++ 有人能告诉我为什么这超过了2秒的时间限制吗?(短代码)
我已经挣扎了2天了。请问,有谁能告诉我,为什么我以后使用20000、0和40000数字作为输入时,它会超过时间限制?我试图使变量类型尽可能大,但这似乎也没有帮助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
#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;i cout您的代码的复杂度是O(n^2),这对于n=20000来说太高了。降低复杂度,用Qsort替换冒泡排序。尝试使用自定义比较函数进行排序。如何使用std:sort?我不熟悉它。而且快速排序没有性能最差的场景O(n^2)也是吗?这取决于实现。当您选择随机轴元素时,它取O(n log n)。如果您愿意,您可以使用合并排序或任何复杂度为O(log n)的排序您是否分析了您的代码以确定其实际花费的时间?我该如何做?您可以从这里开始阅读:#include
?!??不,只是不。不要这样做。请参阅感谢您让我知道第二个链接:)。您是一个英雄,但我对第一个链接一无所知。我可以请您进行必要的排序吗在我的代码中进行方法替换。我正在乞讨,如果代码是在我的上下文中编写的,那么理解代码就容易多了。请:,初学者最难的问题是知道在哪里寻找答案。当你使用快捷键(如代码)>包含< <代码>之外的链接中的问题——你不知道如何正确使用事物。例如,如果你想使用C++ <代码>矢量< /代码>,你需要<代码>包含“< /代码>正确的标题”。基于系统调用的IO,如open()
/read()
/write()
——您必须学习如何识别正确的头。例如,要使用Copen()
系统调用,您可以使用man open
命令查看open
的手册页。