Задача Яндекса на алгоритмы

В первой строке входных данных записано 3 положительных целых числа n, m, q (1≤q≤105,1≤n⋅m≤106) — число дата-центров, число серверов в каждом из дата-центров и число событий соответственно. В последующих q строках записаны события, которые могут иметь один из следующих видов:

RESET i — был перезагружен i-й дата-центр (1≤i≤n)

DISABLE ij — в i-м дата-центре был выключен j-й сервер (1≤i≤n,1≤j≤m)

GETMAX — получить номер дата-центра с наибольшим произведением Ri∗Ai

GETMIN — получить номер дата-центра с наименьшим произведением Ri*Ai

Ri - количество перезапусков для i-го датацентра, Ai - количество включенных серверов у i-го в момент вызова GETMIN/GETMAX

На каждый запрос вида GETMIN или GETMAX выведите единственное положительное целое число — номер дата-центра, подходящий под условие. В случае неоднозначности ответа выведите номер наименьшего из дата-центров. Ввод:

3 3 12

DISABLE 1 2

DISABLE 2 1

DISABLE 3 3

GETMAX

RESET 1

RESET 2

DISABLE 1 2

DISABLE 1 3

DISABLE 2 2

GETMAX

RESET 3

GETMIN

Вывод:

1

2

1

Мой код:

#include <iostream>
#include <vector>

int main() {
    int n, m, q;
    std::cin>>n>>m>>q;
    std::vector<int> resulter;
    std::string string_;
    int **my_pair = new int*[n];
    int *reset = new int [n];
    for (int i = 0; i < n; ++i) {
        my_pair[i] = new int [m];
        reset[i] = 0;
        for (int j = 0; j < m; j++) {
            my_pair[i][j] = 1;
        }
    }
    if (q >= 1 && q <= 100000 && n*m >= 1 && n*m <= 1000000) {
        for (int i = 0; i < q; i++) {
            std::cin>>string_;
            if (string_ == "DISABLE") {
                int a, b;
                std::cin>>a>>b;
                if (a >= 1 && a <= n && b >=1 && b <= m) {
                    my_pair[a-1][b-1] = 0;
                }
            }
            if (string_ == "RESET") {
                int a;
                std::cin>>a;
                if (a >= 1 && a <= n) {
                    for (int i = 0; i < m; i++) {
                        my_pair[a-1][i] = 1;
                    }
                    reset[a-1]++;
                }
            }
            if (string_ == "GETMIN") {
                int server_counter = 0;
                int result = 0;
                bool start = false;
                int min = 0;
                int number = 0;
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        if (my_pair[i][j] == 1) {
                            server_counter++;
                        }
                    }
                    result = server_counter * reset[i];
                    if (!start) {
                        min = result;
                        start = true;
                    } else {
                        if (result < min) {
                            number = i;
                            min = result;
                        }
                    }
                    server_counter = 0;
                }
                resulter.push_back(number+1);
            }
            if (string_ == "GETMAX") {
                int server_counter = 0;
                int result = 0;
                bool start = false;
                int max = 0;
                int number = 0;
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        if (my_pair[i][j] == 1) {
                            server_counter++;
                        }
                    }
                    result = server_counter * reset[i];
                    if (!start) {
                        max = result;
                        start = true;
                    } else {
                        if (result > max) {
                            number = i;
                            max = result;
                        }
                    }
                    server_counter = 0;
                }
                resulter.push_back(number+1);
            }
        }
    }
    for (int i = 0; i < (int)resulter.size(); i++) {
        std::cout<<resulter[i]<<std::endl;
    }
    return 0;
}

Написал вот решение, пару предоставленных тестов проходит, а дальше косяк. В чем может быть проблема?


Ответы (0 шт):