This Is The Question时间限制错误在CodeChef
这里是我的解决方案:
#include <iostream>
using namespace std;
int main(){
unsigned long numberOfGums;
unsigned long hardnessLimit;
unsigned long counter = 0;
cin >> numberOfGums;
cin >> hardnessLimit;
unsigned long gums[numberOfGums];
for(unsigned long i=0; i<numberOfGums; i++){
cin >> gums[i];
}
for(unsigned long i=0; i<numberOfGums; i++){
if(gums[i] < hardnessLimit){
for(unsigned long j=i+1; j<numberOfGums; j++){
if((gums[i] + gums[j]) < hardnessLimit){
counter++;
}
}
}
}
cout << counter << endl;
return 0;
}
这个节目是给我TLE(超过时间限制)错误,因为对此我只得到了30分满分100.具体来说,这个程序无法完成子任务-2价值其余70马克(在问题页面给出)。
我曾尝试这样的东西用的printf和scanf函数而不是CIN和COUT,但该程序仍不够快。
我该怎么做才能改进这个程序,或者什么是更好的方法来解决这个问题。
我尝试这样做还可以,但得到了同样的错误:
#include <iostream>
using namespace std;
int main(){
long numberOfGums;
long hardnessLimit;
long counter = 0;
long temp = 0;
cin >> numberOfGums;
cin >> hardnessLimit;
long gums[numberOfGums];
for(long i=0; i<numberOfGums; i++){
cin >> temp;
if(temp < hardnessLimit){
gums[i] = temp;
}
}
for(long i=0; i<numberOfGums; i++){
if(gums[i] != -1){
for(long j=i+1; (j<numberOfGums); j++){
if(((gums[i] + gums[j]) < hardnessLimit) && gums[j] != -1){
counter++;
}
}
}
}
cout << counter << endl;
return 0;
}
因为这可能是一个可以优化的蛮力解决方案。当numberOfGums可以大到100,000时,您有一个o(n^2)复杂性解决方案。 – DhruvPathak
你有什么更好的方法建议,排序数组或什么? – Virus
请删除C标签,这绝不是有效的C代码 – UnholySheep