#include #include #include #include #include #include #include #include using namespace std; typedef long double LD; typedef pair PLD; int n, a, b; LD GetRandom() { int x = rand() % 10000; int y = rand() % 10000; return (x * 10000 + y) / 10000000000.0; } vector GenSeq(int sz, int tgt) { vector t; t.push_back(GetRandom()); while ((int) t.size() < sz) { t.push_back(t.back() + GetRandom()); } if (sz < 2) return t; LD lo = 0, hi = 17.3 / (sz - 1); for (int i = 0; i < 100; ++i) { LD mid = (lo + hi) / 2.0; int num = 0; for (int y = 0; y < sz; ++y) { for (int x = 0; x < y; ++x) { if ((t[y] + y * mid) - (t[x] + x * mid) <= 10) ++num; } } if (num >= tgt) lo = mid; else hi = mid; } for (int i = 0; i < sz; ++i) t[i] += lo * i; return t; } int main() { srand(time(NULL)); scanf("%d%d%d", &n, &a, &b); int u, v; for (u = 1; u <= n; ++u) { v = n - u; if (u >= v && u * (u - 1) / 2 + v * (v - 1) / 2 >= a) break; } int au = (int) (1.0 * a * u * (u - 1) / (u * (u - 1) + v * (v - 1)) + 0.5); int av = a - au; b -= u * (u - 1) / 2 + v * (v - 1) / 2; vector su = GenSeq(u, au); vector sv = GenSeq(v, av); vector thresholds; for (auto s : su) { for (auto t : sv) { thresholds.push_back(sqrt(400 - (t - s) * (t - s)) - 0.000000001); } } sort(thresholds.begin(), thresholds.end()); reverse(thresholds.begin(), thresholds.end()); double c = thresholds[b - 1]; // U组的 y 坐标 vector pts; for (auto s : su) pts.push_back({ s, c }); for (auto t : sv) pts.push_back({ t, 0 }); for (auto [x, y] : pts) printf("%.12Lf %.12Lf\n", x, y); return 0; }