我最近发现了一个名为codechef的网站,您可以在其中提交问题的解决方案。我为一个问题提交了两个答案,一个是C,另一个是C++。两个代码几乎相同。但是当我用 C 提交的代码在 4.89s 中执行时,我在 C++ 中提交的代码超时(超过 8 秒)。这怎么可能?时间去哪儿了?
问题是:
输入
输入以两个正整数 n k (n, k<=107) 开头。接下来的 n 行输入包含一个正整数 ti,每行不大于 10^9。
输出
写入单个整数进行输出,表示有多少个整数 ti 可以被 k 整除。
Example
Input:
7 3
1
51
966369
7
9
999996
11
Output:
4
我的 C 代码:
#include<stdio.h>
int main() {
int n,k,t;
scanf("%d %d",&n,&k);
int i,num=0;
for(i=0;i<n;i++) {
scanf("%d",&t);
if(t%k==0) num++;
}
printf("%d",num);
return 0;
}
我在C++的代码:
#include<iostream>
using namespace std;
int main() {
int n, k, t,num=0;
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>t;
if(t%k==0) num++;
}
cout<<num;
return 0;
}
即使它们做同样的事情,代码也不是真的一样
c ++版本使用cin和流,默认情况下比scanf等慢。
默认情况下,cin/cout 会浪费时间将自身与 C 库的 stdio 缓冲区同步,以便您可以自由地将对 scanf/printf 的调用与 cin/cout 上的操作混合在一起。您可以使用std::ios_base::sync_with_stdio(false);
关闭此功能
通过这样做,我期望花费的时间或多或少是相似的
我通常在代码中添加这 3 行,紧跟在 main() 之后,以获得更快的输入输出:
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
所以,试试这个:
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k, t,num=0;
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>t;
if(t%k==0) num++;
}
cout<<num;
return 0;
}