题意
\(t\)组数据(\(1 \le t \le 1000\)),每组数据给一个整数 \(n\)(\(1 \le n \le 10^{18}\)),找出两个整数 \(l\) 和 \(r\)($ -10^{18}\le l < r \le 10^{18} $) 使 $l + (l + 1)+ \ldots + (r - 1) + r =n $ 。
思路
看到这个题目,首先会想到 \(l = n\) 且 \(r = n\),但是发现题目要求 \(l < r\)。
仔细观察一下此题的数据范围,发现 \(l\) 和 \(r\) 可以为负数,但是 \(n\) 为正数。众所周知,互为相反数的两个数和为 \(0\),所以我们可以让 $l = -(n-1) $,即 $l = 1-n $。
于是可以得到 $l + (l + 1)+ \ldots + (r - 1) =0 $,而 $r = n $,所以 $l + (l + 1)+ \ldots + (r - 1) + r =n $ 。
CODE
提示:别忘了开 \(long\) \(long\)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,n,l,r;
signed main(){
scanf("%lld",&T);
while(T--){
scanf("%lld",&n); l=1-n; r=n;
printf("%lld %lld\n",l,r);
}
return 0;
}
标签:10,le,CF1594A,题解,long,18,ldots,lld
From: https://www.cnblogs.com/wonderfish/p/17599418.html