Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6305
Последний выпуск: 19.06.2015

Коптеры

85K
10 марта
rzjanin
5 / / 09.03.2019
Код:
#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;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог