zoukankan      html  css  js  c++  java
  • 程序运行时间

    时间复杂度毕竟是对最坏情况的估测,还是不太准确,遇到一些在超时边缘的题目,还是得好好算一算。

    比如下面的代码,稳定的运行时间比1s多一点点(当然是在我的个人电脑上,而本人的电脑配置的确有点低,所以仅供参考)

    /*数据运行时间测试*/
     
    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    #include<ctime>
    using namespace std;
    
    char s[200005]; 
    int main()
    {	
    	int num=0;
    	for(int i=1;i<=400000000;i++) num++; //4×10^8
    	
    	printf("num : %d
    ",num); 
    	printf("time : %lf
    ",(double)clock()/CLOCKS_PER_SEC);
    	return 0;
    }
     
    

     

    再对一道题,模拟一下评测姬。

    题目链接

    首先是该题在评测姬上的AC情况

    AC代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<ctime>
     5 using namespace std;
     6 
     7 char s[20005];
     8 int main()
     9 {
    10     scanf("%s",s);
    11     int m=0;
    12     for(int i=1;s[i];i++)
    13         {
    14             if(strcmp(s+m,s+i)<0) m=i;
    15         }
    16         
    17     int l=strlen(s);
    18     l=l-1;
    19     while(s[l]=='0'&&l>=1) l--;
    20     
    21     for(int i=m;i<=l;i++)
    22         printf("%c",s[i]);
    23     printf("
    ");
    24 
    25     return 0;
    26 }
    View Code0

    目测这个数据是20000个9

    开始本地模拟:

    建立in文件:

     

     1 /*数据写入*/
     2  
     3 #include<stdio.h>
     4 #include<iostream>
     5 #include<stdlib.h>
     6 using namespace std;
     7 
     8 char s[200005]; 
     9 int main()
    10 {
    11     FILE *fp;
    12     if((fp=fopen("test.in","w"))==NULL) 
    13     {  
    14         printf("File cannot be opened
    ");  
    15         exit(1);  
    16     } 
    17     /*------输入字符串-------*/
    18      int i;
    19      for(i=0;i<20000;i++)
    20          s[i]='9';
    21       s[i]='';
    22      
    23      fputs(s,fp);
    24     
    25     if(fclose(fp)!=0) 
    26     {  
    27         printf("File cannot be closed
    ");   
    28         exit(1);   
    29     }   
    30     else  
    31     printf("File is now closed
    "); 
    32    
    33     return 0;
    34 }
    35  
    View Code1

     

    测试代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<stdlib.h>
     5 #include<ctime>
     6 using namespace std;
     7 
     8 char s[20005];
     9 int main()
    10 {    //scanf("%s",s);
    11     FILE *fp;
    12     if((fp=fopen("test.in","r"))==NULL) 
    13     {  
    14         printf("File cannot be opened
    ");  
    15         exit(1);  
    16     }
    17     fgets(s,20000+1,fp);
    18     fclose(fp);
    19 
    20     int m=0;
    21     for(int i=1;s[i];i++)
    22         {
    23             if(strcmp(s+m,s+i)<0) m=i;
    24         }
    25         
    26     int l=strlen(s);
    27     l=l-1;
    28     while(s[l]=='0'&&l>=1) l--;
    29     
    30     if((fp=fopen("test.out","w"))==NULL) 
    31     {  
    32         printf("File cannot be opened
    ");  
    33         exit(1);  
    34     }
    35     for(int i=m;i<=l;i++)
    36         fputc(s[i],fp);
    37     fputc('
    ',fp);
    38     
    39     fclose(fp);
    40      
    41     printf("time : %lf
    ",(double)clock()/CLOCKS_PER_SEC);
    42 
    43     return 0;
    44 }
    View Code2

    测试结果:

    大概是这个值,贵校的评测姬还是很强,十倍于我的垃圾电脑。

    HOWEVER

    我试了一下不用strcmp函数,改用自己写的一个for循环来判断。结果评测姬:0.260s,本地:0.806s,这个比值更准确一点。我的代码是2e8条简单代码的样子。

    推测该评测姬可以在1s内运行8e8条简单代码。

     

     

  • 相关阅读:
    MySql-数据库基础
    Window安装MySQL
    Python程序中的进程操作-进程间通信(multiprocess.Queue)
    线程
    上传电影代码
    并发编程基础
    基于socketserver实现并发的socket编程
    模拟ssh远程执行命令
    GIT的使用,Pycharm中使用GitHub
    主机如何访问运行在虚拟机中的Django项目
  • 原文地址:https://www.cnblogs.com/lnu161403214/p/8328604.html
Copyright © 2011-2022 走看看