Theofanis has a riddle for you and if you manage to solve it, he will give you a Cypriot snack halloumi for free (Cypriot cheese).
You are given an integer nn. You need to find two integers ll and rr such that -10^{18} \le l < r \le 10^{18}−1018≤l<r≤1018 and l + (l + 1) + \ldots + (r - 1) + r = nl+(l+1)+…+(r−1)+r=n.
Input
The first line contains a single integer tt (1 \le t \le 10^41≤t≤104) — the number of test cases.
The first and only line of each test case contains a single integer nn (1 \le n \le 10^{18}1≤n≤1018).
Output
For each test case, print the two integers ll and rr such that -10^{18} \le l < r \le 10^{18}−1018≤l<r≤1018 and l + (l + 1) + \ldots + (r - 1) + r = nl+(l+1)+…+(r−1)+r=n.
It can be proven that an answer always exists. If there are multiple answers, print any.
#include<iostream>
using namespace std;
int main() {
long long l[10000] = { 0 }, r[10000] = { 0 };//n为给定的数,l,r为机找的数,且l<r
unsigned long long n;
int t = 0;
cin >> t;
for (int i = 0;i < t;i++) {
cin >> n;
l[i] = 0 - n + 1;
r[i] = n;
}
for (int i = 0;i < t;i++) {
cout << l[i] << " " << r[i]<<endl;
}
return 0;
}
next one is alternative scheme.
#include<iostream>
using namespace std;
int main() {
long long n = 0, times, p[10000] = { 0 }, q[10000] = { 0 };
cin >> times;
for (int i = 0;i < times;i++) {
cin >> n;
if (n % 2 == 1) {
/*cout << (n / 2) << " " << (n / 2 + 1);*/
p[i] = n / 2;
q[i] = n / 2 + 1;
}
if (n % 2 == 0) {
int k = n;
while (k != 1) {
k /= 2;
if (k % 2 == 1 && k != 1) {
/*cout << n / k - (k / 2) << " " << n / k + (k / 2);*/
p[i] = n / k - (k / 2);
q[i] = n / k + (k / 2);
break;
}
else if (k == 1) {
/*cout << (0 - n + 1) << " " << n;*/
p[i] = 0 - n + 1;
q[i] = n;
}
}
}
}
for (int i = 0;i < times;i++) {
cout << p[i] << " " << q[i]<<endl;
}
return 0;
}