Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2019, 05:24   #1
rzjanin
Новичок
Джуниор
 
Регистрация: 10.03.2019
Сообщений: 2
По умолчанию Коптеры - код к олимпиадных задачам - задача на составление конфигурации квадрокоптеров

Код:
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int n, m, ccount = 0, mmove = 5;
vector<int> mem(8);

void vivod() {
	mem[5] = ccount + 1;
	if (mem[5] >= 120) {
		mem[5] = 120;
	}
	cout << mmove << endl;
	for (int i = 0; i < 8; i++) {
		if (i != 5) mem[i] += 128;
		cout << mem[i] << " ";
	}
	cin >> n;
}

int main()
{
	//vhodnie dannie
	cin >> n;
	vector<pair<int, int>> figura(n);
	for (int i = 0; i < n; i++) cin >> figura[i].second >> figura[i].first;
	for (int i = 0; i < 8; i++) {
		cin >> mem[i];
		if (i != 5 && mem[i] != 0) mem[i] -= 128;
	}
	cin >> m;
	vector<vector<int>> mems(m);
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < 9; j++) {
			int x;
			cin >> x;
			mems[i].push_back(x);
			if (mems[i][j] != 0 && j != 0 && j != 6) mems[i][j] -= 128;
		}
	}
	//obrabotka dannih
	sort(figura.begin(), figura.end());
	int minusX = figura[0].second, minusY = figura[0].first;
	for (int i = 0; i < n; i++) {
		figura[i].second -= minusX;
		figura[i].first -= minusY;
	}
	ccount = mem[5];
	//opredelyaem tochky otscheta i koordinati
	if (mem[2] == 0 || mem[2] == 3 || mem[2] == 4) {
		//esli mojem, polychaem koordinati
		for (int i = 0; i < m; i++) {
			if (mems[i][3] == 1 || mems[i][3] == 2) {
				if (mems[i][0] == 1) {
					mem[1] = mems[i][2] + 1;
					mem[3] = mems[i][4];
				}
				else if (mems[i][0] == 2) {
					mem[1] = mems[i][2] - 1;
					mem[3] = mems[i][4];
				}
				else if (mems[i][0] == 3) {
					mem[1] = mems[i][2];
					mem[3] = mems[i][4] - 1;
				}
				else if (mems[i][0] == 4) {
					mem[1] = mems[i][2];
					mem[3] = mems[i][4] + 1;
				}
				mem[2] = 1;
				mem[0] = mem[1];
				mem[4] = mem[3];
				mem[7] = 1;
				vivod();
				return 0;
			}
		}
		bool iOsobenniy = true;
		for (int i = 0; i < m; i++) {
			if (mems[i][0] == 1 || mems[i][0] == 4) {
				iOsobenniy = false;
				break;
			}
		}
		if (iOsobenniy) {
			if (mem[2] == 0) {
				mem[2] = 3;
			}
			else {
				mem[2] = 4;
				for (int i = 0; i < m; i++) {
					if (mems[i][2] != 0 || mems[i][4] != 0 || mems[i][3] == 3) {
						if (mems[i][0] == 1) {
							if (mems[i][4] > mem[3] || mems[i][4] == mem[3] && mems[i][2] + 1 > mem[1]){
								mem[1] = mems[i][2] + 1;
								mem[3] = mems[i][4];
							}
						}
						else if (mems[i][0] == 2) {
							if (mems[i][4] > mem[3] || mems[i][4] == mem[3] && mems[i][2] - 1 > mem[1]) {
								mem[1] = mems[i][2] - 1;
								mem[3] = mems[i][4];
							}
						}
						else if (mems[i][0] == 3) {
							if (mems[i][4] - 1 > mem[3] || mems[i][4] - 1 == mem[3] && mems[i][2] > mem[1]) {
								mem[1] = mems[i][2];
								mem[3] = mems[i][4] - 1;
							}
						}
						else if (mems[i][0] == 4) {
							if (mems[i][4] + 1 > mem[3] || mems[i][4] + 1 == mem[3] && mems[i][2] > mem[1]) {
								mem[1] = mems[i][2];
								mem[3] = mems[i][4] + 1;
							}
						}
					}
				}
				if (mem[1] == 0 && mem[3] == 0 && ccount >= 22) {
					mem[2] = 2;
				}
			}
		}
		else {
			for (int i = 0; i < m; i++) {
				if (mems[i][2] != 0 || mems[i][4] != 0 || mems[i][3] == 3) {
					if (mems[i][0] == 1) {
						if (mems[i][4] > mem[3] || mems[i][4] == mem[3] && mems[i][2] + 1 > mem[1]) {
							mem[1] = mems[i][2] + 1;
							mem[3] = mems[i][4];
						}
					}
					else if (mems[i][0] == 2) {
						if (mems[i][4] > mem[3] || mems[i][4] == mem[3] && mems[i][2] - 1 > mem[1]) {
							mem[1] = mems[i][2] - 1;
							mem[3] = mems[i][4];
						}
					}
					else if (mems[i][0] == 3) {
						if (mems[i][4] - 1 > mem[3] || mems[i][4] - 1 == mem[3] && mems[i][2] > mem[1]) {
							mem[1] = mems[i][2];
							mem[3] = mems[i][4] - 1;
						}
					}
					else if (mems[i][0] == 4) {
						if (mems[i][4] + 1 > mem[3] || mems[i][4] + 1 == mem[3] && mems[i][2] > mem[1]) {
							mem[1] = mems[i][2];
							mem[3] = mems[i][4] + 1;
						}
					}
				}
			}
		}
	}
	else if (mem[2] == 1 && ccount >= 44) {
		int kydaX = figura[mem[7]].second, kydaY = figura[mem[7]].first;
		int vlevo = mem[0] - kydaX, vniz = mem[4] - kydaY;
		//esli priletel
		if (abs(vlevo) + abs(vniz) == 0) {
			for (int i = 0; i < m; i++) {
				if (mems[i][0] == 5 && mems[i][8] == mem[7]) {
					if (mems[i][4] < mem[3] || mems[i][4] == mem[3] && mems[i][2] < mem[1]) {
						mem[7]++;
						if (mem[7] >= n) mem[7] = 1;
						vivod();
						return 0;
					}
				}
			}
			mem[2] = 2;
		}
		//pri podlete
		else if (abs(vlevo) + abs(vniz) == 1) {
			if (vlevo != 0) {
				if (vlevo > 0) {
					for (int i = 0; i < m; i++) {
						if (mems[i][0] == 1 && mems[i][3] == 2) {
							mem[7]++;
							if (mem[7] >= n) mem[7] = 1;
							vivod();
							return 0;
						}
					}
					mmove = 1;
					mem[0]--;
				}
				else {
					for (int i = 0; i < m; i++) {
						if (mems[i][0] == 2 && mems[i][3] == 2) {
							mem[7]++;
							if (mem[7] >= n) mem[7] = 1;
							vivod();
							return 0;
						}
					}
					mmove = 2;
					mem[0]++;
				}
			}
			else {
				if (vniz > 0) {
					for (int i = 0; i < m; i++) {
						if (mems[i][0] == 4 && mems[i][3] == 2) {
							mem[7]++;
							if (mem[7] >= n) mem[7] = 1;
							vivod();
							return 0;
						}
					}
					mmove = 4;
					mem[4]--;
				}
				else {
					for (int i = 0; i < m; i++) {
						if (mems[i][0] == 3 && mems[i][3] == 2) {
							mem[7]++;
							if (mem[7] >= n) mem[7] = 1;
							vivod();
							return 0;
						}
					}
					mmove = 3;
					mem[4]++;
				}
			}
		}
		//esli daleko letet
		else {
			if (vlevo != 0) {
				if (vlevo > 0) {
					mmove = 1;
					mem[0]--;
				}
				else {
					mmove = 2;
					mem[0]++;
				}
			}
			else {
				if (vniz > 0) {
					mmove = 4;
					mem[4]--;
				}
				else {
					mmove = 3;
					mem[4]++;
				}
			}
		}
	}
	//vivod dannih
	vivod();
    return 0;
}
rzjanin вне форума Ответить с цитированием
Старый 10.03.2019, 06:08   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

О чём тема и почему в свободном общении?
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на составление числа exbbrat Помощь студентам 1 10.11.2018 12:52
Задача на составление графика любознайка Microsoft Office Excel 5 04.09.2012 00:06
Несколько олимпиадных задач MooNDeaR Свободное общение 6 11.03.2012 07:18
Интерсная задача!Составление программ с использованием типизированных файлов locdoc Помощь студентам 27 06.12.2010 17:41
Задача на составление формулы kiki7 Помощь студентам 7 20.10.2010 22:12