/* * ball.cpp * * Created on: Feb 17, 2013 * Author: krassi */ #include #include #include #include using namespace std; typedef double num; const num g = -9.81; num s(num v, num t) { return (0.5 * g * t + v) * t; } struct st { int t, v; st(int t = 0, int v = 0) : t(t), v(v) { } bool operator <(const st& that) const { return t < that.t; } }; int main(int argc, char **argv) { freopen("ball.in", "r", stdin); freopen("ball.out", "w", stdout); int n; scanf("%d", &n); vector sts(n + 1); sts[0] = st(0, 0); for (int i = 0; i < n; ++i) { int t, v; scanf("%d%d", &t, &v); sts[i + 1].t = t; sts[i + 1].v = v; } sort(sts.begin(), sts.end()); ++n; vector ty(n); ty[0] = 0; for (int i = 1; i < n; ++i) { ty[i] = ty[i - 1] + s(sts[i - 1].v, sts[i].t - sts[i - 1].t); } num last_y = ty[n - 1]; num last_t = sts[n - 1].t; num last_v = sts[n - 1].v; int q; scanf("%d", &q); for (int i = 0; i < q; ++i) { int t; scanf("%d", &t); num y; if (t == 0) { y = 0; } else if (t >= last_t) { y = last_y + s(last_v, t - last_t); } else { // a <= y < b int ai = 0; int bi = n - 1; int ci; num ti; while (ai + 1 < bi) { ci = (ai + bi) / 2; ti = sts[ci].t; if (ti <= t) { ai = ci; } else { bi = ci; } } y = ty[ai] + s(sts[ai].v, t - sts[ai].t); } num x = 5 * t; printf("%.3lf %.3lf\n", x, y); } }