Разница во времени исполнения в 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;
}