https://www.luogu.org/problemnew/show/P1014
很显然同一对角线的和是相等的。我们求出前缀和然后二分。
最后注意奇偶的顺序是相反的。
#include<bits/stdc++.h> using namespace std; #define ll long long int prefix[100005]; int init(){ prefix[1]=1; for(int i=2;i<=65535;i++){ prefix[i]=prefix[i-1]+i; } //cout<<prefix[65535]<<endl; } int main(){ init(); int n; scanf("%d",&n); int id=lower_bound(prefix,prefix+65536,n)-prefix; id--; int res=n-prefix[id]; int sum=id+2; if(sum%2==0) res=sum-res; printf("%d/%d ",res,sum-res); }