Cod sursă (job #513359)

Utilizator avatar BigBoss_29 Name Name BigBoss_29 IP ascuns
Problemă Romb2 (clasele 9-10) Compilator cpp | 1,47 kb
Rundă Arhiva de probleme Status evaluat
Dată 16 dec. 2019 17:40:30 Scor 65
#include <fstream>

using namespace std;

int T, k, i, pminim;
double qx, qy, cx, cy, c1x, c1y, c2x, c2y, c3x, c3y, c4x, c4y, dx, dy, d1, d2, d3, d4, minim;
long long sol, start;

double dist(double x1, double y1, double x2, double y2, double x3, double y3) {
	double a = y2-y1;
	double b = x1-x2;
	double c = -x1*(y2-y1) + y1*(x2-x1);
	double aux = a*x3+b*y3+c;
	return aux*aux/(a*a + b*b);
}

int main() {
	ifstream fin("romb2.in");
	ofstream fout("romb2.out");
	fin>>T;
	while (T) {
		fin>>dx>>dy>>k>>qx>>qy;
		start = 1LL << (2*(k-1));
		cx = 0;
		cy = 0;		
		sol = 0;
		for (i=1;i<=k;i++) {
			
			dx /= 2; dy /= 2;
			c1x = cx; c1y = cy + dy;
			c2x = cx - dx; c2y = cy;
			c3x = cx; c3y = cy - dy;
			c4x = cx + dx; c4y = cy;
			d1 = dist(c1x, c1y, c2x, c2y, qx, qy);
			d2 = dist(c2x, c2y, c3x, c3y, qx, qy);
			d3 = dist(c3x, c3y, c4x, c4y, qx, qy);
			d4 = dist(c4x, c4y, c1x, c1y, qx, qy);
			minim = d1 + d4;
			pminim = 1;
			if (minim > d1 + d2) {
				minim = d1 + d2;
				pminim = 2;
			}
			if (minim > d2 + d3) {
				minim = d2 + d3;
				pminim = 3;
			}
			if (minim > d3 + d4) {
				minim = d3 + d4;
				pminim = 4;
			}
			if (pminim == 1) {
				cx = c1x;
				cy = c1y;
				sol += 0*start;
			}
			if (pminim == 2) {
				cx = c2x;
				cy = c2y;
				sol += 1*start;
			}
			if (pminim == 3) {
				cx = c3x;
				cy = c3y;
				sol += 2*start;
			}
			if (pminim == 4) {
				cx = c4x;
				cy = c4y;
				sol += 3*start;
			}
			start /= 4LL;
		}
		fout<<sol+1<<"\n";
		T--;
	}
	return 0;
}