Cod sursa(job #800055)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 20 octombrie 2012 17:26:42
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cassert>
#include <cstdio>

using namespace std;

const int N = 10005;

int n;
double xm[N], ym[N], x[N], y[N];

void read() {
    assert(freopen("poligon2.in", "r", stdin) != NULL);
    assert(freopen("poligon2.out", "w", stdout) != NULL);

    assert(scanf("%d", &n) == 1);
    for (int i = 1; i <= n; ++i)
        assert(scanf("%lf %lf", &xm[i], &ym[i]) == 2);
}

void solve() {
    double minus = 1.0, sumx = 0.0, sumy = 0.0;
    for (int i = n - 1; i > 0; --i) {
        sumx += 2.0 * xm[i] * minus;
        sumy += 2.0 * ym[i] * minus;
        minus *= -1.0;
    }
    
    x[1] = (2.0 * xm[n] + sumx) / 2.0;
    y[1] = (2.0 * ym[n] + sumy) / 2.0;
    
    for (int i = 2; i <= n; ++i) {
        x[i] = (2.0 * xm[i - 1]) - x[i - 1];
        y[i] = (2.0 * ym[i - 1]) - y[i - 1];
    }
}

void print() {
    for (int i = 1; i <= n; ++i)
        printf("%lf %lf\n", x[i], y[i]);
}

int main() {
    read();
    if (n % 2 == 0) {
        //printf("fara solutie\n");
        return 0;
    }
    solve();
    print();
}