我最近发现这个名为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
#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;
}
#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;
}
答案 0 :(得分:28)
即使他们做同样的事情,代码也不是真的相同
c ++版本使用cin和stream,默认情况下比scanf等慢。
默认情况下,cin / cout浪费时间与C库的stdio缓冲区同步,这样你就可以自由地将对scanf / printf的调用与cin / cout上的操作混合。您可以使用std::ios_base::sync_with_stdio(false);
通过这样做,所花费的时间或多或少与我期望的相似
答案 1 :(得分:1)
我通常在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;
}