Pagini recente » Cod sursa (job #2494285) | Cod sursa (job #2593572) | Cod sursa (job #1987867) | Cod sursa (job #2986984) | Cod sursa (job #2950747)
#include <fstream>
#define MAXN 100000
using namespace std;
struct punct{
int x, y;
}puncte[MAXN];
struct seg{
double a, b;
bool vertical;
}segmente[MAXN];
int main(){
int n, i, y_min, y_max, y_curent, lat_st, lat_dr;
long long sum;
fin >> n;
y_max = 0;
y_min = MAXN + 1;
for( i = 0; i < n; i++ ){
fin >> puncte[i].x >> puncte[i].y;
y_min = min( y_min, puncte[i].y );
y_max = max( y_max, puncte[i].y );
}
for( i = 0; i < n - 1; i++ ){
if( puncte[i + 1].x != puncte[i].x ){
segmente[i].a = (puncte[i + 1].y - puncte[i].y ) / ( puncte[i + 1].x - puncte[i].x );
segmente[i].b = puncte[i].y - segmente[i].a * puncte[i].x;
}
else //dreapta verticala
segmente[i].vertical = true;
}
if( puncte[0].x != puncte[n - 1].x ){
segmente[n - 1].a = (puncte[0].y - puncte[n - 1].y ) / ( puncte[0].x - puncte[n - 1].x );
segmente[n - 1].b = puncte[n - 1].y - segmente[n - 1].a * puncte[n - 1].x;
}
else
segmente[n - 1].vertical = true;
sum = 0;
lat_dr = 0, lat_st = n - 1;
for( y_curent = y_min; y_curent <= y_max; y_curent++ ){
//actualizam laturile
if( !(puncte[lat_dr].x <= y_curent && y_curent <= puncte[lat_dr] ))
//y_Curent = a * x + b pt ambele laturi daca sunt
//x urile dintre....
}
}