Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef LOCAL
- #define _GLIBCXX_DEBUG
- #endif
- #include <bits/stdc++.h>
- using namespace std;
- #define forn(i, n) for (int i = 0; i < int(n); ++i)
- #define ford(i, n) for (int i = int(n) - 1; i >= 0; --i)
- #define sz(c) int((c).size())
- #define all(c) (c).begin(), (c).end()
- #define fst first
- #define snd second
- #define pb push_back
- #define mp(x, y) make_pair(x, y)
- using ll = long long;
- using vi = vector<int>;
- using pii = pair<int, int>;
- #define FILE_NAME "a"
- #ifdef LOCAL
- #define eprintf(args...) fprintf(stderr, args), fflush(stderr)
- #else
- #define eprintf(args...) ;
- #endif
- struct cir
- {
- int x0, y0, r;
- void read ()
- {
- assert(scanf(" %d %d %d", &x0, &y0, &r) == 3);
- assert(r >= 0);
- }
- };
- int n;
- vector<cir> v;
- bool read() {
- if (scanf("%d", &n) < 1) {
- return 0;
- }
- v.resize(n);
- forn (i, n)
- v[i].read();
- return 1;
- }
- #ifdef LOCAL
- const int len = 20;
- #else
- const int len = 256;
- #endif
- using T = double;
- const T inf = 1e9;
- void solve() {
- bool bad = false;
- forn (i, n)
- bad |= v[i].r == 0;
- if (bad)
- {
- printf("Circles without representation were detected!\n");
- forn (i, n) if (v[i].r == 0)
- printf("Unable to build circle %d %d %d\n", v[i].x0, v[i].y0, v[i].r);
- return;
- }
- vector<string> data(len, string(len, '.'));
- auto put = [&] (int x, int y, int dig)
- {
- x %= len, y %= len;
- if (x < 0)
- x += len;
- if (y < 0)
- y += len;
- data[y][x] = '0' + dig;
- };
- const vi dx {0, +1, +1};
- const vi dy {-1, -1, 0};
- forn (i, n)
- {
- int r = v[i].r, x0 = v[i].x0, y0 = v[i].y0;
- const int color = (i + 1) % 10;
- auto go_put = [&] (int x, int y)
- {
- put(x0 + x, y0 + y, color);
- put(x0 - x, y0 + y, color);
- put(x0 - x, y0 - y, color);
- put(x0 + x, y0 - y, color);
- };
- int x = 0, y = r;
- while (x != r || y != 0)
- {
- go_put(x, y);
- int bx = -1, by = -1;
- T best = inf;
- forn (d, 3)
- {
- int nx = x + dx[d], ny = y + dy[d];
- T cur = fabs(sqrt((ll)nx * nx + (ll)ny * ny) - r);
- if (cur < best)
- {
- best = cur;
- bx = nx;
- by = ny;
- }
- }
- assert(best != inf);
- x = bx, y = by;
- }
- go_put(x, y);
- }
- forn (i, len)
- printf("%s\n", data[i].c_str());
- }
- int main() {
- #ifdef LOCAL
- freopen(FILE_NAME ".in", "r", stdin);
- freopen(FILE_NAME ".out", "w", stdout);
- #endif
- while (read()) {
- solve();
- }
- #ifdef LOCAL
- eprintf("Time: %.10f\n", clock() * 1.0 / CLOCKS_PER_SEC);
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement