Cod sursa(job #448953)

Utilizator prisonbreakMichael Scofield prisonbreak Data 5 mai 2010 09:10:08
Problema Poligon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.54 kb
#include <cstdio>
#include <algorithm>
#include <vector>



#define nmax 810
#define pb push_back
#define f first
#define s second
#define mp make_pair
using namespace std;

struct point {int x, y;};
vector <pair <point, point> > seg;
vector <pair <int, int> > D [nmax], BEG;
point ins [nmax], P1 , P2 ;
int n, m;
//Beg - cbin1, D - cbin2;
inline bool cmp (const point &a, const point &b) {
	return a.x == b.x ? (a.y < b.y) : (a.x < b.x);
}
void preproc ()
{	
	int nrbenzi, i, mijx, mijy, beg;
	beg = 0;
	point bx1, bx2;
	// |
	BEG.pb (mp (0, seg [0].f.x));
	for (nrbenzi = 1; nrbenzi < n; nrbenzi++)
	{
		// |extract* * * * coordx|
		bx1 = seg [nrbenzi - 1].f;
		bx2 = seg [nrbenzi].f;
		printf ("%d %d %d %d\n", bx1.x, bx1.y, bx2.x, bx2.y);
		for (i = beg; i < n; i++) {
			//if (seg [i].f.x > bx2.x) break;// | | 
			if (seg [i].f.x <= bx2.x) { // | - |
				if (seg [i].s.x <= bx2.x) { // | -|
					if (seg [i].f.x < bx1.x) {//-|- |
						mijx = seg [i].s.x + bx1.x >> 1;
						mijy = seg [i].s.y + bx1.y >> 1;
						D [nrbenzi].pb (mp (mijx, mijy));
					} else { // |-|
						mijx = seg [i].s.x + seg [i].f.x >> 1;
						mijy = seg [i].s.y + seg [i].f.y >> 1;
						D [nrbenzi].pb (mp (mijx, mijy));
					}
				}
				else if (seg [i].s.x > bx2.x) {
					mijx = bx2.y + seg [i].f.y >> 1;
					mijy = bx2.x + seg [i].f.x >> 1;
					D [nrbenzi].pb (mp (mijx, mijy));
				}
			}
		}
		if (D [nrbenzi].size ()) {
			printf ("Mij beg*******************\n");
			for (i = 0; i < D [nrbenzi].size (); i++) printf ("%d %d, ", D [nrbenzi][i].f, D [nrbenzi][i].s);
			printf ("\nmij end***************************************\n");
		}
		BEG.pb (mp (bx1.x, bx2.x)); // aici cauti binar 1
	}
}
int main () {
	int i;
	freopen ("poligon.in", "r", stdin);
	freopen ("poligon.out", "w", stdout);
	
	scanf ("%d%d\n", &n, &m);
	scanf ("%d%d\n", &ins [1].x, &ins [1].y);
	
	//seg.pb (mp (P1, P2)); //seg.pb (mp (P1, P2));
	for (i = 2; i <= n; i++) {
		scanf ("%d%d\n", &ins [i].x, &ins [i].y);
		P1.x = ins [i - 1].x;
		P1.y = ins [i - 1].y;
		P2.x = ins [i].x;
		P2.y = ins [i].y;
		seg.pb (mp (P1, P2));
	}
	seg.pb (mp (ins [n], ins [1]));
	for (i = 0; i < n; i++) 
		printf ("%d %d %d %d\n", seg [i].f.x, seg [i].f.y, seg [i].s.x, seg [i].s.y);
	//sort (seg.begin (), seg.end (), cmp);
	sort (ins + 1, ins + n + 1, cmp);
	printf ("---------------------------------------\n");
	preproc ();
	//for (i = 0; i <= n; i++) printf ("%d %d\n", BEG [i].f, BEG [i].s);
	/*while (m--) {
		scanf ("%d%d\n", &a, &b);
		solve (a, b);
	}*/
	//for (i = 1; i <= nrbenzi; i++) printf ("%d %d\n", V [i].x, V [i].y);
	return 0;
}