1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 51Nod-1859-Clarke and number

51Nod-1859-Clarke and number

时间:2020-08-25 01:28:02

相关推荐

51Nod-1859-Clarke and number

ACM模版

描述

题解

这个题,简单的来,就是暴力打表找规律,注意一点, sqrt() 可能存在精度问题,最好自己写一个二分的,因为这个, WA 了四回……

官方题解也给大家分享一下,写得挺详细的:

代码

#include <cstdio>using namespace std;typedef long long ll;const ll INF = 1e10; // ll 开方后约为 1e9ll x, k;ll sqrt(ll x){ll l = -1, r = INF, m;while (r - l > 1){m = (l + r) >> 1;if (m * m > x){r = m;}else if (m * m < x){l = m;}else{return m;}}return l;}int main(){int T;scanf("%d", &T);while (T--){scanf("%lld%lld", &x, &k);if (x == 0){printf("0\n");continue;}ll y = sqrt(x);if (k == 1){if (x == 1){printf("1\n");continue;}if (y * y == x){printf("%lld\n", y * 2 - 1);}else{printf("%lld\n", y * 2);}}else{if (x == 1 || x == 3){printf("-1\n");}else if (x == 2){printf("1\n");}else if (x == 5){printf("3\n");}else{ll t = sqrt(x - 1);if (y * y == x || t * t == x - 1){printf("%lld\n", y * 2 - 2);}else{printf("%lld\n", y * 2 - 1);}}}}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。