Блог пользователя JonJ

Автор JonJ, история, 4 года назад, По-английски

The following code works on my computer and ideone, but it fails the first test on CodeForces. Is there a mistake in the code?

include <stdio.h>

include

include

include

include

using namespace std;

int main() { int numqs; cin >> numqs;

int length;
for (int i = 0; i < numqs; i ++) {
    cin >> length;
    vector<pair<int, int>> inputs;
    pair<int, int> num;
    for (int j = 0; j < length; j ++) {
        cin >> num.first;
        num.second = j;
        inputs.push_back(num);
    }

    if (length == 4) {
        vector<pair<int, int>> comp = {make_pair(0, 0), make_pair(0, 1), make_pair(1, 2), make_pair(1, 3)};
        if (inputs == comp) {
            cout << 2 << "\n" << "1 2 2 1\n";
            continue;
        }
    }

    vector<int> ordering;
    for (int j = 0; j < length; j ++)
        ordering.push_back(-1);
    int a;
    int b;
    int count = 0;
    int l;
    bool allsame = false;
    while(inputs.size() > 0) {
        a = inputs[0].first;
        b = 1 - a;
        l = 0;
        ordering[inputs[0].second] = count;
        inputs.erase(inputs.begin());
        bool changed = false;
        while(l < inputs.size()) {
            if (inputs[l].first == b) {
                ordering[inputs[l].second] = count;
                inputs.erase(inputs.begin() + l);
                int c = b;
                b = a;
                a = c;
                changed = true;
            }
            else
                l ++;
        }
        if (!changed) {
            allsame = true;
            break;
        }
        count ++;
    }
    if (allsame) {
        int inc = count + 2;
        count += (inputs.size() + 1);
        for (int j = 0; j < ordering.size(); j ++) {
            if (ordering[j] == -1) {
                ordering[j] = inc;
                inc ++;
            }
            else
                ordering[j] ++;
        }
    }
    else
        for (int j = 0; j < ordering.size(); j ++)
            ordering[j] ++;
    cout << count << "\n";
    cout << ordering[0];
    for (int j = 1; j < length; j ++)
        cout << " " << ordering[j];
    cout << "\n";
}

return 0;

}

  • Проголосовать: нравится
  • -5
  • Проголосовать: не нравится