Pagini recente » Cod sursa (job #1021842) | Cod sursa (job #152286) | Cod sursa (job #358092) | Cod sursa (job #1538348) | Cod sursa (job #3158261)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("trapez.in");
ofstream cout ("trapez.out");
int main ()
{
int numar_puncte;
cin >> numar_puncte;
pair <int , int> coordonate[1000];
for (int indice = 0 ; indice < numar_puncte ; indice++)
cin >> coordonate[indice].first >> coordonate[indice].second;
for (int indice_1 = 0 ; indice_1 < numar_puncte ; indice_1++)
for (int indice_2 = indice_1 + 1 ; indice_2 < numar_puncte ; indice_2++)
if (coordonate[indice_1].first > coordonate[indice_2].first)
swap(coordonate[indice_1] , coordonate[indice_2]);
long long optiuni[1001] = {0} , total = 0;
for (int indice = 0 ; indice < numar_puncte ; indice++)
{
int lungime_secventa = 1;
while (indice < numar_puncte - 1 && coordonate[indice + 1].first == coordonate[indice].first)
{ indice++; lungime_secventa++; }
if (lungime_secventa > 1)
total += (optiuni[++optiuni[0]] = lungime_secventa * (lungime_secventa - 1) / 2);
}
long long modalitati = 0;
for (int indice = 1 ; indice <= optiuni[0] ; indice++)
modalitati += optiuni[indice] * (total -= optiuni[indice]);
for (int indice_1 = 0 ; indice_1 < numar_puncte ; indice_1++)
for (int indice_2 = indice_1 + 1 ; indice_2 < numar_puncte ; indice_2++)
if (coordonate[indice_1].second > coordonate[indice_2].second)
swap(coordonate[indice_1] , coordonate[indice_2]);
optiuni[0] = {0};
for (int indice = 0 ; indice < numar_puncte ; indice++)
{
int lungime_secventa = 1;
while (indice < numar_puncte - 1 && coordonate[indice + 1].second == coordonate[indice].second)
{ indice++; lungime_secventa++; }
if (lungime_secventa > 1)
total += (optiuni[++optiuni[0]] = lungime_secventa * (lungime_secventa - 1) / 2);
}
for (int indice = 1 ; indice <= optiuni[0] ; indice++)
modalitati += optiuni[indice] * (total -= optiuni[indice]);
cout << modalitati;
cout.close(); cin.close();
return 0;
}