(旧存档) 牛客多校第七场-D题
D 签到
题意
梗题:给你一个 $n$ $(n\le10^{15})$, 如果 $1^2 + 2^2 + … + n^2$ 是完全平方数,输出 “Fake news!”, 否则输出 “Nobody knows it better than me!”
思路
刚开始写了个暴力,算出 1, 24 是唯一合法的解。但是由于太暴力了,怕 wa,所以写了个二分判断完全平方数
代码
#include <bits/stdc++.h>
using namespace std;
using int128_t = __int128;
int128_t sqrt(int128_t x) {
int128_t l = 1, r = x;
while (r - l > 2) {
int128_t m = l + (r - l) / 2;
if (m * m <= x) l = m;
else r = m - 1;
}
return l;
}
bool judge(int128_t n) {
int128_t sum = n * (n + 1) * (2 * n + 1) / 6;
int128_t temp = sqrt(sum);
return temp * temp == sum;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
long long n;
scanf("%lld", &n);
puts(judge(n) ? "Fake news!" : "Nobody knows it better than me!");
}
return 0;
}