8

我最近发现了这个名为 codechef 的网站,您可以在其中提交问题的解决方案。我为一个问题提交了两个答案,一个用 C 语言,另一个用 C++。两个代码几乎相同。但是当我用C提交的代码在4.89s执行时,我用C++提交的代码就超时了(超过8秒)。这怎么可能?时间都去哪儿了?

问题是:

输入

输入以两个正整数 nk (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;
 } 
4

2 回答 2

28

即使他们做同样的事情,代码也不完全相同

c++ 版本默认使用比 scanf 等慢的 cin 和流。

默认情况下,cin/cout 浪费时间与 C 库的 stdio 缓冲区同步,这样您就可以自由地将 scanf/printf 调用与 cin/cout 上的操作混合使用。你可以关闭它std::ios_base::sync_with_stdio(false);

通过这样做,所花费的时间或多或少与我期望的相似

于 2014-03-06T13:04:21.597 回答
1

我通常在 main() 之后在我的代码中添加这 3 行以加快输入输出:

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;
 } 
于 2019-03-24T08:38:09.263 回答