Не могу решить эту задачу, не проходит по времени.
Влад и правильные k-угольники
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Влад - перфекционист. Как и любой перфекционист, он обожает правильные многоугольники. Зная это, его родители подарили ему набор, состоящий из n отрезков на 18-летие, чтобы их сын мог конструировать какие угодно многоугольники. Получив подарок, Влад задался вопросом: так сколько же всего правильных k-угольников он сможет сделать, используя каждый отрезок из набора не более одного раза? Немного потупив, он обратился к Вам, лучшему программисту вселенной, с данной задачей. Помогите Владу решить ее.
Формат ввода
В первой строке записаны два числа n (3 ≤ n ≤ 106) и k (3 ≤ k ≤ n), количество отрезков в наборе и число вершин в искомых многоугольниках соответственно. Во второй строке записано n чисел ai (1 ≤ ai ≤ 109) через пробел, где ai - длина i-го отрезка.
Формат вывода
Выведите одно число - количество правильных k-угольников, которые возможно составить из данного набора отрезков, используя каждый не более одного раза.
Помогите пожалуйста, вот мой код:
#include <fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
void selectSort(int *arr, long size)
{
for (long i = 0; i < size; i++)
for (long j = i + 1; j < size; j++)
if (arr[j] < arr[i])
swap(arr[i], arr[j]);
}
int main()
{
int n, k;
in >> n >> k;
int arr[n];
for(int i = 0; i < n; i++)
in >> arr[i];
selectSort(arr, n);
int answer = 0, count = 0;
for(int i = 0; i < n - (k - 1); i++)
{
for(int j = i; j < n; j++)
{
if(arr[i] == arr[j])
count++;
if(count == k)
{
answer++;
i += k - 1;
break;
}
}
count = 0;
}
out << answer;
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей