Ranking (as of 2013-10-13): 265 out of 725
Language: C++
/*
UVa 10920 - Spiral Tap
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10920_Spiral_Tap.cpp
*/
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
while (true) {
int sz;
long long p;
cin >> sz >> p;
if (!sz && !p)
break;
long long x = (sz + 1) / 2, y = (sz + 1) / 2;
long long q = sqrt(static_cast<double>(p));
// max. odd number equal to or less than sqrt(p)
if (!(q & 1))
q--;
x += (q - 1) / 2; y += (q - 1) / 2;
p -= q * q;
if (p) {
q++;
if (p <= q) {
x -= p - 1; y++;
}
else if (p <= q * 2) {
x -= q - 1; y -= p - q - 1;
}
else if (p <= q * 3) {
x -= q * 3 - p - 1; y -= q - 1;
}
else {
x++; y -= q * 4 - p - 1;
}
}
cout << "Line = " << y << ", column = " << x << ".\n";
}
return 0;
}
No comments:
Post a Comment