Submission #430204
Source Code Expand
#include <iostream> #include <vector> #include <cmath> 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 | 100 |
Code Size | 1771 Byte |
Status | AC |
Exec Time | 500 ms |
Memory | 924 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 100 / 100 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | subtask0_sample_01.txt |
All | subtask0_sample_01.txt, subtask1_large_01.txt, subtask1_mini01.txt, subtask1_random01.txt, subtask1_random02.txt, subtask1_random03.txt, subtask1_random04.txt, subtask1_random05.txt, subtask1_random06.txt, subtask1_random07.txt, subtask1_random08.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
subtask0_sample_01.txt | AC | 25 ms | 800 KB |
subtask1_large_01.txt | AC | 482 ms | 800 KB |
subtask1_mini01.txt | AC | 337 ms | 924 KB |
subtask1_random01.txt | AC | 391 ms | 672 KB |
subtask1_random02.txt | AC | 384 ms | 804 KB |
subtask1_random03.txt | AC | 377 ms | 672 KB |
subtask1_random04.txt | AC | 475 ms | 672 KB |
subtask1_random05.txt | AC | 500 ms | 796 KB |
subtask1_random06.txt | AC | 459 ms | 920 KB |
subtask1_random07.txt | AC | 480 ms | 796 KB |
subtask1_random08.txt | AC | 495 ms | 924 KB |