程序运行时间

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

比如下面的代码,稳定的运行时间比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\n",num); 
	printf("time : %lf\n",(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("\n");
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\n");  
15         exit(1);  
16     } 
17     /*------输入字符串-------*/
18      int i;
19      for(i=0;i<20000;i++)
20          s[i]='9';
21       s[i]='\0';
22      
23      fputs(s,fp);
24     
25     if(fclose(fp)!=0) 
26     {  
27         printf("File cannot be closed\n");   
28         exit(1);   
29     }   
30     else  
31     printf("File is now closed\n"); 
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\n");  
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\n");  
33         exit(1);  
34     }
35     for(int i=m;i<=l;i++)
36         fputc(s[i],fp);
37     fputc('\n',fp);
38     
39     fclose(fp);
40      
41     printf("time : %lf\n",(double)clock()/CLOCKS_PER_SEC);
42 
43     return 0;
44 }
View Code2

测试结果:

 

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

HOWEVER

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

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

 

 

 

 

posted @ 2018-01-22 13:39  hzhuan  阅读(386)  评论(0编辑  收藏  举报