程序运行时间
时间复杂度毕竟是对最坏情况的估测,还是不太准确,遇到一些在超时边缘的题目,还是得好好算一算。
比如下面的代码,稳定的运行时间比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 }
目测这个数据是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
测试代码:
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 }
测试结果:
大概是这个值,贵校的评测姬还是很强,十倍于我的垃圾电脑。
HOWEVER
我试了一下不用strcmp函数,改用自己写的一个for循环来判断。结果评测姬:0.260s,本地:0.806s,这个比值更准确一点。我的代码是2e8条简单代码的样子。
推测该评测姬可以在1s内运行8e8条简单代码。