首页 > 其他 > 详细

oj上机必备:Time Limit Exceeded

时间:2020-01-09 20:04:05      阅读:120      评论:0      收藏:0      [点我收藏+]

 

oj对算法的时间复杂度

 程序性能分析??????

https://blog.csdn.net/qq_41523096/article/details/82142747

 具体的计算??????

https://blog.csdn.net/daijin888888/article/details/66970902?utm_source=app

上面两部分了解了之后,就是接下来的内容:(其实也就是,兄弟,该优化算法了)


 

在竞赛中,一般算机一秒能运行5 x 10^8次汁算,如果题目給出的时间限制カ1s,那么你选择的算法执行的汁算次数最多应该在10^8量级オ有可能解决这个题目。一般 O(n)的算法能解决的数据范围在n < 10^8。

O(n *logn)的算法能解决的数据范围在n <= 10^6。

O(n*sqrt(n) )的算法能解决的数据范围在n < 10^5。

O(n^2)的算法能解决的数据范围在n<5000。

O(n^3)的算法能解决的数据范围在n <300。

O(2^n)的算法能解决的数据范围在n < 25。

O(n!)的算法能解决的数据范围在n < 11。

以上范围仅供参考,实际中还要考虑每种算法的常数。


 

贴一道小依的期末考试题:

 

 

技术分享图片

如果1s的时限给数据范围是10的7或8次方的话一般只能用O(n)的算法

对于上面的题,10的9次方10组数据,也就是10的10次方的时间,这样子1s是不可行的

贴上当时的代码:

技术分享图片
#include<iostream>
using namespace std;
const int max1 = 1000000;
const int max2 = 1000000000;
const int max3 = 10;
void Yoriko(int &a, int &b, int &c, int &k) {
    int i;
    for (i = 0; i < k; i++) {
        if(a==b&&b==c) break;
        if (a > b) a = a - b;
        if (b > c) b = b - c;
        if (c > a)c = c - a;
    }
}
int main() {
    int t;
    int a, b, c, k;
    int i;
    int str[max3][3];
    cin >> t;
    for (i = 0; i < t; i++) {
        cin >> a >> b >> c >> k;
            Yoriko(a,b,c,k);
            str[i][0] = a;
            str[i][1] = b;
            str[i][2] = c;
        }
        for (i = 0; i < t; i++) {
            cout << str[i][0] << " " << str[i][1] << " " << str[i][2] << endl;
        }
}
View Code

加break的话因为abc的范围都是10的6次,1秒就够了。

其他地方有不对不详的地方还请纠正,欢迎相互交流侬。

oj上机必备:Time Limit Exceeded

原文:https://www.cnblogs.com/yoriko/p/12172971.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!