// UVa 10920 - Spiral Tap #include <iostream> #include <cmath> using namespace std; int move[4][2] = { { 0, -1 }, { -1, 0 }, { 0, 1 }, { 1, 0 } }; int main() { int sz, p; while ((cin >> sz >> p) && (sz || p)) { int mr = (sz + 1) / 2, mc = (sz + 1) / 2; int root = floor(pow(p, 0.5)); if (root % 2 == 0) root--; int delta = (root - 1) / 2; int r = mr + delta; int c = mc + delta; int left = p - root * root; if (left > 0) { r++; c++; int dir = 0; while (left >= root + 1) { r += move[dir][0] * (root + 1); c += move[dir][1] * (root + 1); left -= (root + 1); dir++; } if (left) { r += move[dir][0] * (left); c += move[dir][1] * (left); } } cout << "Line = " << r << ", column = " << c << "." << endl; } return 0; }
Monday, May 4, 2015
UVa 10920 - Spiral Tap
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment