Reverse Rot

From programming_contest
Revision as of 17:40, 5 December 2015 by imported>Ww109
Jump to navigation Jump to search

Original Description

Idea

Use the symmetry of the structure: the first two pages are bundled with the last two and so on.

Given an odd P, the other three pages are P + 1, N - P and N - P + 1. For an even P, the other three pages are P - 1, N - P + 1 and N - P + 2.

Code

/*
 * =====================================================================================
 * Filename: MCPC2013-C.cpp
 * Description: Missing Pages
 * Compiler: g++
 * =====================================================================================
 */

#include <iostream>
#include <set>

using namespace std;

int main () {
    int N;
    cin >> N;
    while (N) {
        int P;
        cin >> P;
        set<int> ps;
        if (!(P % 2)) {
            ps.insert(P - 1);
            ps.insert(N - P + 1);
            ps.insert(N - P + 2);
        } else {
            ps.insert(P + 1);
            ps.insert(N - P);
            ps.insert(N - P + 1);
        }
        for (set<int>::iterator i = ps.begin(); i != ps.end(); i++) {
            if (i != ps.begin()) cout << " ";
            cout << *i;
        }
        cout << endl;
        cin >> N;
    }
    return 0;
}