Dzień dobry, próbowałem zrobić zadanie trójkąty jednobarwne ze szkopułu. link:https://szkopul.edu.pl/problemset/problem/UU2Uj-barjiONnRxd9aEVoDj/site/?key=statement
Prawie mi się udało jednak program nie przechodzi ostatniego testu czasowo i mam prośbę czy mógłby ktoś pomóc w skróceniu tego kodu aby przechodził też ostatni test ?
#include <iostream>
using namespace std;
int main()
{
int n, m,a,b;
cin>>n>>m;
int tablica[n+1];
for(int i = 0; i <n+1;i++)
{
tablica[i] = 0;
}
for(int i = 0; i <m;i++)
{
cin>>a>>b;
tablica[a] = tablica[a]+1;
tablica[b] = tablica[b]+1;
}
a = 0;
a = n*(n-1)*(n-2);
a = a/6;
b=0;
for(int i = 0; i <n+1;i++)
{
b = b + (tablica[i]*(n-1-tablica[i]));
}
b = b/2;
cout<<a - b<<endl;
return 0;
}
Program robiłem z pomocą wzoru matematycznego na ilość kombinacji. czyli n! / k! * (n-k)!
oraz wykorzystałem to, że każdy trójkąt różnobarwny musi mieć dwa różnokolorowe boki wychodzące z jednego trójkąta i muszą być koło siebie. Najpierw obliczyłem różnokolorowe i potem odjąłęm je od wszystkich trójkątów.