二分
2024-06-29 12:50:13
发布于:广东
8阅读
0回复
0点赞
#include <iostream>
#include <cstdio>
using namespace std;
int a[100005];
int find(int left, int right, int val){
//cout << left << ' ' << right << endl;
if(left * 1ll * (left + 1) / 2 > val || right * 1ll * (right + 1) / 2 < val) return -1;
if(left >= right - 1) return left;
int mid = (left + right) >> 1;
return max(find(left, mid, val), find(mid, right, val));
}
int main(){
int n;
cin >> n;
if(n == 1){
cout << "1/1";
return 0;
}
int sum = find(1, n - 1, n - 1) + 1;
int m = n - sum * (sum - 1) / 2;
int k = sum - m + 1;
if(sum % 2) swap(m, k);
cout << m << '/' << k;
return 0;
}
这里空空如也
有帮助,赞一个