Submission #430202
Source Code Expand
#include <iostream> #include <vector> using namespace std; //获取小于等于某个和n 的点集数目 long long getSum(long long n) { return (1 + n)*n * 2 + 1; } //根据给定 pos 求得所在点的坐标,由于给定数据范围大于 int,所以使用 long long pair<long long, long long> getPair(long long pos) { if (pos == 1) return pair<long long, long long>(0, 0); //求得一个略大于和的 n long long n = static_cast<long long>(sqrt(static_cast<double>(pos - 1.0) / 2.0)) + 1; //获取略小于当前 pos 的绝对值和的 n while (getSum(n)>pos) { n--; } //求得小于当前绝对值之和的前面的点集数目之和 long long sum = getSum(n); long long diff = pos - sum; n = n + 1; //此时说明点位于所求绝对值之和的前一个值,也就是之前和的最大值 if (diff == 0) { return pair<long long, long long>(n - 1, 0); } else if (diff == 1) { return pair<long long, long long>(-n, 0); } else if (diff < 2 * n) { long long l = -(n - diff / 2); long long r = diff % 2 == 0 ? -diff / 2 : diff / 2; return pair<long long, long long>(l, r); } else if (diff / 2 == n) { long long r = diff % 2 == 0 ? -n : n; return pair<long long, long long>(0, r); } else if (diff < 4 * n) { long long l = (diff - 2 * n) / 2; long long r = (diff - 2 * n) % 2 == 0 ? -(n - l) : n - l; return pair<long long, long long>(l, r); } else { return pair<long long, long long>(n, 0); } } int main() { int n; cin >> n; long long num; for (int i = 0; i < n; i++) { cin >> num; pair<long long, long long> result = getPair(num); cout << result.first << " " << result.second << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | B - n-th Points |
User | cyfcooler |
Language | C++ (G++ 4.6.4) |
Score | 0 |
Code Size | 1753 Byte |
Status | CE |
Compile Error
./Main.cpp: In function ‘std::pair<long long int, long long int> getPair(long long int)’: ./Main.cpp:16:80: error: ‘sqrt’ was not declared in this scope