Rezultati

Up. imeNalogaJezikRezultatČas oddaje
ASMx64-2018 Droni C++ 100/100OK 10. maj '18 @ 19:33

Test Točke Porabljen spomin Porabljen čas Status
#1 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#2 5/5 1,453 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#3 5/5 1,477 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#4 5/5 1,453 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#5 5/5 1,449 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#6 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#7 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#8 5/5 1,477 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#9 5/5 1,453 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#10 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#11 5/5 1,449 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#12 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#13 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#14 5/5 1,477 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#15 5/5 1,453 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#16 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#17 5/5 1,453 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#18 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#19 5/5 1,480 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.
#20 5/5 1,477 MiB 0,000 s OK
Povratna informacija sodniškega sistema:
​The output was correct.

Ocenjevani program (droni.cpp):
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;

int counter = 0;
struct tocka {
	int x, y, z;
};

#pragma warning(disable:4996)

void input(tocka &t) {
	//cin >> t.x >> t.y >> t.z;
	scanf("%i%i%i", &t.x, &t.y, &t.z);
}

int Abs(int x) {
	if (x < 0) return -x;
	return x;
}

int razmik(tocka& t1, tocka &t2) {
	return (Abs(t1.x - t2.x) + Abs(t1.y - t2.y) + Abs(t1.z - t2.z));
}

void izpis(tocka &t1, tocka &t2) {
	counter++;
	//cout << '(' << t1.x << ' ' << t1.y << ' ' << t1.z << ") (" << t2.x << ' ' << t2.y << ' ' << t2.z << ")\n";
	printf("(%i %i %i) (%i %i %i)\n", t1.x, t1.y, t1.z, t2.x, t2.y, t2.z);
}

char premikz(tocka &t, int zk) {
	//if (t.x < cilj.x) { t.x++; return 'd'; }
	//if (t.x > cilj.x) { t.x--; return 'l'; }

//	if (t.y < cilj.y) { t.y++; return 'n'; }
//	if (t.y > cilj.y) { t.y--; return 'v'; }

	if (t.z < zk) { t.z++; return 'u'; }
	if (t.z > zk) { t.z--; return 'b'; }
	return 'f';
}

void premikxy(tocka &t, tocka &cilj) {
	if (t.x < cilj.x) { t.x++; return; }
	if (t.x > cilj.x) { t.x--; return; }

	if (t.y < cilj.y) { t.y++; return; }
	if (t.y > cilj.y) { t.y--; return; }

//	if (t.z < cilj.z) { t.z++; return 'u'; }
//	if (t.z > cilj.z) { t.z--; return 'b'; }
	return;
}


int main() {
	tocka z1, z2, k1, k2;
	
	int v1, v2;

	input(z1);
	input(k1);
	input(z2);
	input(k2);

	izpis(z1, z2);
	v1 = k1.z;
	v2 = k2.z;

	if (v1 == v2) {
		v1++;
		v2--;
	}

	if (z1.x == z2.x && z1.y == z2.y) {
		z1.x++;
		izpis(z1, z2);
	}


	while (z1.z != v1 || z2.z != v2) {
		premikz(z1, v1);
		premikz(z2, v2);
		izpis(z1, z2);
	}

	while (z1.x != k1.x || z1.y != k1.y || z2.x != k2.x || z2.y != k2.y) {
		premikxy(z1, k1);
		premikxy(z2, k2);
		izpis(z1, z2);
	}

	if (v1 != k1.z || v2 != k2.z) {
		v1 = k1.z;
		v2 = k2.z;

		premikz(z1, v1);
		premikz(z2, v2);
		izpis(z1, z2);
	}
	//printf("%i\n", counter);
	//system("pause");
	return 0;
}




/*
#include <iostream>
#include <stack>
#include <vector>
using namespace std;

struct tocka {
	int x, y, z;
};

void input(tocka &t) {
	cin >> t.x >> t.y >> t.z;
}

int Abs(int x) {
	if (x < 0) return -x;
	return x;
}

int razmik(tocka& t1, tocka &t2) {
	return (Abs(t1.x - t2.x) + Abs(t1.y - t2.y) + Abs(t1.z - t2.z));
}

char premik(tocka &t, tocka &cilj) {
	if (t.x < cilj.x) { t.x++; return 'd'; }
	if (t.x > cilj.x) { t.x--; return 'l'; }

	if (t.y < cilj.y) { t.y++; return 'n'; }
	if (t.y > cilj.y) { t.y--; return 'v'; }

	if (t.z < cilj.z) { t.z++; return 'u';}
	if (t.z > cilj.z) { t.z--; return 'b'; }
	return 'f';
}

bool isEqual(tocka &t1, tocka &t2) {
	return (t1.x == t2.x && t1.y == t2.y && t1.z == t2.z);
}

void izpis(tocka &t1, tocka &t2) {
	cout << '(' << t1.x << ' ' << t1.y << ' ' << t1.z << ") (" << t2.x << ' ' << t2.y << ' ' << t2.z << ")\n";
}

void blizu(tocka &t1, tocka &cilj1, tocka &t2, tocka &cilj2) {
	char p;
	if (razmik(t2, cilj2) < razmik(t1, cilj1)) {
		for (int i = 0; i < 10; i++) {
			p = premik(t1, cilj1);
			if (isEqual(t1, t2)) {
				switch (p) {
				case 'd':
					t1.x--;

					t1.y++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.x++; izpis(t1, t2); }
					t1.y--;
					izpis(t1, t2);
					break;

				case 'l':
					t1.x++;

					t1.y++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.x--; izpis(t1, t2); }
					t1.y--;
					izpis(t1, t2);
					break;

				case 'n':
					t1.y--;

					t1.z++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.y++; izpis(t1, t2); }
					t1.z--;
					izpis(t1, t2);
					break;

				case 'v':
					t1.y++;

					t1.z++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.y--; izpis(t1, t2); }
					t1.z--;
					izpis(t1, t2);
					break;

				case 'u':
					t1.z--;

					t1.y++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.z++; izpis(t1, t2); }
					t1.y--;
					izpis(t1, t2);
					break;

				case 'b':
					t1.z--;

					t1.y++;
					izpis(t1, t2);
					for (int j = 0; j < 3; j++) { t1.z--; izpis(t1, t2); }
					t1.y--;
					izpis(t1, t2);
					break;
				}
			}
			else {
				izpis(t1, t2);
			}
		}
	}
	else {
		for (int i = 0; i < 10; i++) {
			p = premik(t2, cilj2);
			if (isEqual(t2, t1)) {
				switch (p) {
				case 'd':
					t2.x--;

					t2.y++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.x++; izpis(t2, t1); }
					t2.y--;
					izpis(t2, t1);
					break;

				case 'l':
					t2.x++;

					t2.y++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.x--; izpis(t2, t1); }
					t2.y--;
					izpis(t2, t1);
					break;

				case 'n':
					t2.y--;

					t2.z++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.y++; izpis(t2, t1); }
					t2.z--;
					izpis(t2, t1);
					break;

				case 'v':
					t2.y++;

					t2.z++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.y--; izpis(t2, t1); }
					t2.z--;
					izpis(t2, t1);
					break;

				case 'u':
					t2.z--;

					t2.y++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.z++; izpis(t2, t1); }
					t2.y--;
					izpis(t2, t1);
					break;

				case 'b':
					t2.z--;

					t2.y++;
					izpis(t2, t1);
					for (int j = 0; j < 3; j++) { t2.z--; izpis(t2, t1); }
					t2.y--;
					izpis(t2, t1);
					break;
				}
			}
			else {
				izpis(t1, t2);
			}
		}
	}
}

stack<tocka> S;
bool OK;

tocka DFS_premik(int i, tocka &tt){
	tocka t;
	switch (i) {
	case 0: {t.x = tt.x + 1; t.y = tt.y; t.z = tt.z; break;}
	case 1: {t.x = tt.x - 1; t.y = tt.y; t.z = tt.z; break;}
	case 2: {t.x = tt.x; t.y = tt.y + 1; t.z = tt.z; break;}
	case 3: {t.x = tt.x; t.y = tt.y - 1; t.z = tt.z; break;}
	case 4: {t.x = tt.x; t.y = tt.y; t.z = tt.z + 1; break;}
	case 5: {t.x = tt.x; t.y = tt.y; t.z = tt.z - 1; break;}
	}
	return t;
}
void DFS(tocka t, int dist,  tocka &cilj, tocka &umik) {
	if (razmik(t, cilj) > dist)
		return;

	if (isEqual(t, cilj)) {
		OK = true;
		S.push(t);
		return;
	}
	if (isEqual(t, umik)) {
		return;
	}

	for (int i = 0; i < 6; i++) {
		DFS(DFS_premik(i, t), razmik(t, cilj), cilj, umik);
		if (OK) {
			S.push(t);
			return;
		}
	}
	return;
}

bool Najdi(vector<pair<tocka, tocka>> &vec, pair<tocka, tocka> p) {
	for (int i = 0; i < (int)vec.size(); i++) {
		if (isEqual(p.first, vec[i].first) && isEqual(p.second, vec[i].second))
			return true;
	}
	return false;
}

int main() {
	tocka z1, z2, k1, k2;
	input(z1);
	input(z2);
	input(k1);
	input(k2);
	OK = false;

	vector<pair<tocka, tocka>> vec;

	while (!isEqual(z1, k1) && !isEqual(z2, k2)) {
		if (razmik(z1, z2) > 5) {
			premik(z1, k1);
			premik(z2, k2);
			izpis(z1, z2);
		}
		else {
			if (Najdi(vec, make_pair(z1, k1))) {
				if (isEqual(z1, k2)) {
					z1.x++;
					if (isEqual(z1, z2)) 
						z1.x -= 2;

					izpis(z1, z2);
				}
				if (isEqual(z2, k1)) {
					z2.x++;
					if (isEqual(z1, z2))
						z2.x -= 2;

					izpis(z1, z2);
				}
				break;
			}
			vec.push_back(make_pair(z1, k1));
			blizu(z1, k1, z2, k2);
		}
	}

	if (!isEqual(z1, k1)) {
		DFS(z1, razmik(z1, k1), k1, z2);
		
		while (!S.empty()) {
			izpis(S.top(), z2);
			S.pop();
		}
	}
	else if (!isEqual(z2, k2)) {
		DFS(z2, razmik(z2, k2), k2, z1);
		
		while (!S.empty()) {
			izpis(z1,  S.top());
			S.pop();
		}
	}
	return 0;
}

*/