Se consideră N
puncte din plan, având coordonate numere naturale, relativ la un reper cartezian XOY
, oricare două puncte fiind distincte.
Cerința
Cunoscând N
și coordonatele celor N
puncte, să se determine:
1) Numărul maxim de puncte care au aceeași abscisă.
2) Numărul triunghiurilor care se pot desena respectând următoarele condiții:
- au toate vârfurile în puncte dintre cele date;
- au o latură paralelă cu
OX
; - nu au laturi paralele cu
OY
;
Date de intrare
Fișierul de intrare triunghiuri2.in
conține pe prima linie numărul p
, care indică cerința ce trebuie rezolvată (p
are valoarea 1
sau 2
). Pe a doua linie se află numărul natural N
, reprezentând numărul punctelor date. Pe următoarele N
linii se găsesc câte două valori naturale x y
, separate prin câte un spațiu, reprezentând coordonatele punctelor date.
Date de ieșire
Fișierul triunghiuri2.out
va avea următoarea structură:
- Dacă
p = 1
se va scrie în fișier, pe prima linie, numărul maxim de puncte care au aceeași abscisă (cerința 1). - Dacă
p = 2
se va scrie în fișier, pe prima linie, numărul triunghiurilor care se pot desena respectând condițiile date,modulo 1 000 003
, adică restul împărțirii numărului de triunghiuri la1 000 003
(cerința 2).
Restricții și precizări
3 <= N <= 100 000
0 <= x < 1000
0 <= y < 1000
- Se acordă 25 puncte pentru rezolvarea corectă a cerinței 1 și 65 puncte pentru rezolvarea corectă a cerinței 2. În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemple.
Exemplul 1
triunghiuri2.in
1 5 2 1 1 4 3 4 3 2 6 4
triunghiuri2.out
2
Explicație
Se rezolvă cerința 1). Sunt maximum două puncte care au aceeași abscisă: (3, 4)
și (3,2)
.
Exemplul 2
triunghiuri2.in
2 5 2 1 1 4 3 4 3 2 6 4
triunghiuri2.out
4
Explicație
Se rezolvă cerința 2). Se pot trasa 4
triunghiuri care satisfac cerințele. Dacă notăm cele 5
puncte din fișier cu A
, B
, C
, D
, E
(ca în imagine), atunci, cele 4
triunghiuri care satisfac cerințele sunt : ABC
, ACE
, ABE
și BDE
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Triunghiuri2:
///sursa oficiala - prof. Alin Burta
#include <fstream>
#define Nmax 100001 //numarul maxim de puncte
#define Cmax 1001 //coordonata maxima
#define IN "triunghiuri2.in"
#define OU "triunghiuri2.out"
using namespace std;
long N; //numarul punctelor
long long NrTr; //numarul triunghiurilor gasite
short nx[Cmax]; // nx[i] - cate puncte sunt pe absisa i
short ny[Cmax]; // ny[i] - cate puncte sunt pe ordonata i
short H[Cmax][Cmax]; //memorez punctele ordonate H[i] - lista punctelor cu ordonata i
long long aux, aux1, aux2, sumLin;
int main()
{
long int i, j, Max, V;
short x, y;
//citire date
ifstream Fin(IN);
Fin >> V >> N;
for(i = 0; i <= Cmax - 1; ++i) nx[i] = ny[i] = 0;
for(i = 1; i <= N; ++i)
{
Fin >> x >> y;
nx[x]++; ny[y]++;
H[ y ][ ny[y] ] = x;
}
Fin.close();
if( V == 1)
{
Max = 0;
for(i = 0; i <= 999; ++i)
if(nx[i] > Max)
Max = nx[i];
ofstream Fou(OU);
Fou << Max << '\n';
Fou.close();
}
else
{
NrTr = 0;
for( i = 0; i< Cmax-1; ++i)
if(ny[i] > 1)
{
sumLin = 0;
for(j = 1; j<= ny[i]; ++j) sumLin += ( nx[ H[i][j] ] - 1 ) * (ny[i] - 1);
aux1 = ( ny[i] * (ny[i] - 1) / 2 );
aux2 = ( N - ny[i]);
aux = aux1 * aux2;
NrTr += aux - sumLin ;
NrTr %= 1000003;
}
ofstream Fou(OU);
Fou << NrTr << '\n';
Fou.close();
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2071 Triunghiuri2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2071 Triunghiuri2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!