Codeforces Round #747 (Div. 2)-A. Consecutive Sum Riddle

falconlee236

·

2021. 11. 11. 23:38

반응형

문제 설명

지우는 정수에게 수수께끼를 냈다.

정수 $n$이 있는데, 우리가 구해야 할 것은 $-10^{18} \le l < r \le 10^{18}$ 과 $l + (l + 1) + ... + (r - l) + r = n$ 을 만족하는 두 정수 $l$과 $r$을 구해야 한다.

Input
첫번째 줄에는 테스트 케이스의 수 $t (1 \le t \le 10^4)$ 이 주어진다.

각 테스트 케이스의 첫번째 줄에는 정수 $n (1 \le n \le 10^{18})$이 주어진다.

Output
각 테스트케이스마다 $-10^{18} \le l < r \le 10^{18}$ 과 $l + (l + 1) + ... + (r - l) + r = n$ 을 만족하는 두 정수 $l$과 $r$을 출력한다.

답이 여러개 있으면 아무거나 출력한다.

Example
input
7
1
2
3
6
100
25
3000000000000

output
0 1
-1 2
1 2
1 3
18 22
-2 7
999999999999 1000000000001

문제 접근

사용한 알고리즘: 수학
걸린 시간 : 00:02
이지하다. 유연한 사고와 A번 문제는 쉽다는 믿음을 가지고 있으면 금방 풀 수 있는 문제이다.

$l = -(n - 1), r = n$ 으로 하면 $l$ 부터 $r$까지 더했을 때 $n$이 나온다.

정답 코드

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t; cin >> t;
    while(t--){
        long long n; cin >> n;
        cout << -(n - 1) << " " << n << "\n";
    }
    return 0;
}
반응형