/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 2ms 532.0 KiB

Code

#include <iostream>
#include <vector>
using namespace std;

vector<int> solve(int n) {
    vector<int> result(n + 1);
    
    // Estratégia: para obter a menor permutação lexicograficamente
    // onde Pi != i, usamos o padrão:
    // - Se n é par: trocamos pares adjacentes (1,2), (3,4), ...
    // - Se n é ímpar: trocamos (1,2), depois (3,4), ..., e no final (n-1,n)
    //   mas para manter lexicograficamente menor, fazemos (1,2,3) -> (2,3,1)
    
    if (n % 2 == 0) {
        // n é par: trocar pares adjacentes
        for (int i = 1; i <= n; i += 2) {
            result[i] = i + 1;
            result[i + 1] = i;
        }
    } else {
        // n é ímpar: trocar pares e ajustar os últimos 3
        for (int i = 1; i <= n - 3; i += 2) {
            result[i] = i + 1;
            result[i + 1] = i;
        }
        // Para os últimos 3 elementos: (n-2, n-1, n) -> (n-1, n, n-2)
        result[n - 2] = n - 1;
        result[n - 1] = n;
        result[n] = n - 2;
    }
    
    return result;
}

int main() {
    int t;
    cin >> t;
    
    while (t--) {
        int n;
        cin >> n;
        
        vector<int> perm = solve(n);
        
        // Imprimir resultado (índices de 1 a n)
        for (int i = 1; i <= n; i++) {
            cout << perm[i];
            if (i < n) cout << " ";
        }
        cout << endl;
    }
    
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1210 A. Smallest Permutation
Contest
Educational Round 1
Language
C++17 (G++ 13.2.0)
Submit At
2025-07-14 17:26:19
Judged At
2025-07-14 17:26:19
Judged By
Score
100
Total Time
2ms
Peak Memory
532.0 KiB