最简单易懂的题解
2024-02-06 18:19:15
发布于:广东
22阅读
0回复
0点赞
直接一个小小的二分就解决了!
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
long long n;
scanf("%lld",&n);
long long l=0,r=n,x=-1;
while (l<=r) {
long long mid=(l+r)>>1;
long long sum=(mid+1)*mid>>1;
if (sum<=n) {
l=mid+1;
x=max(x,mid);
}else {
r=mid-1;
}
}
if (x*(x+1)>>1==n) {
if (x%2==0) {
printf("%lld/1",x);
}else {
printf("1/%lld",x);
}
}else {
long long r=n-(x*(x+1)>>1);
if ((x+1)%2==0) {
printf("%lld/%lld",r,x+2-r);
}else {
printf("%lld/%lld",x+2-r,r);
}
}
return 0;
}
这里空空如也
有帮助,赞一个