#include #include #include class Big { public: bool sign; int dig[15]; Big() {for (int i = 0; i < 15; i++) dig[i] = 0;} Big(string &s) { for (int i = 0; i < 15; i++) dig[i] = 0; if (s[0] == '-') sign = true; else sign = false; int dp = 0; for (int i = s.length()-1; i >= 0; i--) { if (s[i] == '-') continue; dig[dp++] = s[i] - '0'; } } void construct (string &s) { for (int i = 0; i < 15; i++) dig[i] = 0; if (s[0] == '-') sign = true; else sign = false; int dp = 0; for (int i = s.length()-1; i >= 0; i--) { if (s[i] == '-') continue; dig[dp++] = s[i] - '0'; } } void overflow() { for (int i = 0; i < 15; i++) { while (dig[i] < 0) { dig[i] += 10; dig[i+1]--; } while (dig[i] >= 10) { dig[i] -= 10; dig[i+1]++; } } } bool abs_smaller (Big &b) { for (int i = 14; i >= 0; i--) if (dig[i] != b.dig[i]) return dig[i] < b.dig[i]; return false; } Big operator+ (Big &b) { Big res; if (sign == b.sign) { res.sign = sign; for (int i = 0; i < 15; i++) { res.dig[i] = dig[i] + b.dig[i]; } res.overflow(); return res; } if (abs_smaller (b)) { res.sign = b.sign; for (int i = 0; i < 15; i++) res.dig[i] = b.dig[i] - dig[i]; } else { res.sign = sign; for (int i = 0; i < 15; i++) res.dig[i] = dig[i] - b.dig[i]; } res.overflow(); return res; } Big &half() { for (int i = 0; i < 15; i++) { if ((dig[i] % 2) != 0) dig[i-1] += 5; dig[i] /= 2; } return *this; } }; ostream &operator<< (ostream &out, Big b) { if (b.sign) out << '-'; bool zero = true; for (int i = 14; i >= 0; i--) { if (b.dig[i] != 0) zero = false; if (!zero) cout << b.dig[i]; } return out; } Big x[1024]; Big y[1024]; int main() { ifstream in("diplomatic.in"); while (true) { int n; in >> n; if (!in.good()) break; cout << n << ' '; Big tmp, xstart, ystart; string str; in >> str; xstart.construct(str); in >> str; ystart.construct(str); Big xlast, ylast, xact, yact; xlast = xstart; ylast = ystart; for (int i = 1; i < n; i++) { in >> str; xact.construct(str); in >> str; yact.construct(str); tmp = xact + xlast; cout << tmp.half() << ' '; tmp = yact + ylast; cout << tmp.half() << ' '; xlast = xact; ylast = yact; } tmp = xstart + xlast; cout << tmp.half() << ' '; tmp = ystart + ylast; cout << tmp.half() << endl; } return 0; }