/* ID: espr1t TASK: KEYWORDS: CONTEST: CodeIT Round 4 */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; FILE *in; FILE *out; const int MAX = 131072; const double G = 9.81; struct Query { int idx; double t; bool operator < (const Query& r) const { return t != r.t ? t < r.t : idx < r.idx; } }; struct Update { double t, v; bool operator < (const Update& r) const { return t != r.t ? t < r.t : v < r.v; } }; int n, m; Update a[MAX]; Query b[MAX]; double ans[MAX][2]; double calc(double t, double v) { return 0.5 * G * t * t + v * t; } int main(void) { in = stdin; out = stdout; in = fopen("ball.in", "rt"); out = fopen("ball.out", "wt"); fscanf(in, "%d", &n); for (int i = 0; i < n; i++) { fscanf(in, "%lf %lf", &a[i].t, &a[i].v); } sort(a, a + n); fscanf(in, "%d", &m); for (int i = 0; i < m; i++) { b[i].idx = i; fscanf(in, "%lf", &b[i].t); } sort(b, b + m); int idx = 0; double y = 0.0, v = 0.0, t = 0.0; for (int i = 0; i < m; i++) { while (idx < n && a[idx].t < b[i].t) { y += calc(a[idx].t - t, v); t = a[idx].t; v = -a[idx].v; idx++; } ans[b[i].idx][0] = b[i].t * 5.0; ans[b[i].idx][1] = y + calc(b[i].t - t, v); } for (int i = 0; i < m; i++) { fprintf(out, "%.3lf %.3lf\n", ans[i][0], -ans[i][1]); } return 0; }