Разница во времени исполнения в C и C++

Недавно я нашел этот сайт под названием 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;
 } 

1 ответ

Решение

Код не совсем то же самое, хотя они делают то же самое

Версия C++ использует cin и потоки, которые по умолчанию медленнее, чем scanf и т. Д.

По умолчанию cin / cout тратит время на синхронизацию с буферами stdio библиотеки C, так что вы можете свободно смешивать вызовы 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;
 } 
Другие вопросы по тегам