вот проблема, которую я решил с веб-сайта проблемы программирования (codechef.com, если кто-то не хочет видеть это решение, прежде чем попробовать себя). Это позволило решить проблему примерно за 5,43 секунды с помощью тестовых данных, другие решили эту же проблему с теми же данными теста за 0,14 секунды, но с гораздо более сложным кодом. Может ли кто-нибудь указать на определенные области моего кода, где я теряю производительность? Я все еще изучаю С++, поэтому я знаю, что есть миллион способов решить эту проблему, но я хотел бы знать, могу ли я улучшить собственное решение с некоторыми незначительными изменениями, а не переписывать все это. Или, если есть относительно простые решения, которые сопоставимы по длине, но будут работать лучше, чем мои, мне было бы интересно увидеть их также.
Пожалуйста, имейте в виду, что я изучаю С++, поэтому моя цель - улучшить код, который я понимаю, а не просто дать идеальное решение.
Спасибо
Проблема:
Цель этой проблемы - проверить, достаточно ли метод, который вы используете для чтения входных данных, для обработки проблем с фирменным знаком с огромным предупреждением ввода/вывода. Ожидается, что вы сможете обрабатывать не менее 2,5 МБ входных данных в секунду во время выполнения. Ограничение времени для обработки тестовых данных составляет 8 секунд.
Ввод начинается с двух натуральных чисел n k (n, k <= 10 ^ 7). Следующие n строк ввода содержат одно положительное целое число ti, не более 10 ^ 9, каждое. Выход
Напишите одно целое число для вывода, обозначая, сколько целых чисел ti делится на k. Пример
Ввод:
7 3
1
51
966369
7
9
999996
11
Вывод:
4
Решение:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
//n is number of integers to perform calculation on
//k is the divisor
//inputnum is the number to be divided by k
//total is the total number of inputnums divisible by k
int n,k,inputnum,total;
//initialize total to zero
total=0;
//read in n and k from stdin
scanf("%i%i",&n,&k);
//loop n times and if k divides into n, increment total
for (n; n>0; n--)
{
scanf("%i",&inputnum);
if(inputnum % k==0) total += 1;
}
//output value of total
printf("%i",total);
return 0;
}