本以为是个水题结果输出格式暗含巨坑 说不出话来
第一次不重复的概率是1 第二次不买重概率 n-1 / n 以此类推
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long LL;
inline LL gcd(LL a, LL b)
{
while(b)
{
LL r = a % b;
a = b;
b = r;
}
return a;
}
struct Node {
LL l, x, y;
Node(){}
Node(LL L, LL X, LL Y) { l = L; x = X; y = Y; }
Node operator += (const Node &t) {
LL Ny = y * t.y;
LL Nx = x * t.y + t.x * y;
LL GCD = gcd(Ny, Nx); Ny /= GCD; Nx /= GCD;
return Node(l = Nx / Ny + l + t.l, x = Nx - Nx / Ny * Ny, y = Ny);
}
}ans;
int len(LL tmp) {
int ans = 0;
LL t = 1;
while(tmp >= t) {
ans++;
t *= 10;
}
return ans;
}
int main()
{
int n;
ios::sync_with_stdio(false);
while(cin >> n)
{
ans = Node(0, 0, 1);
for(int i = 0; i < n; i++)
ans += Node(0, n, n-i);
if(ans.x == 0) {
cout << ans.l << '\n'; continue;
}
int Lenx = 0, Leny, Lenl;
Lenx = len(ans.x); Leny = len(ans.y); Lenl = len(ans.l);
for(int i = 1; i <= Lenl+1; i++) cout << ' ';
cout << ans.x << '\n' << ans.l << ' ';
for(int i = 1; i <= Leny; i++) cout << '-';
cout << '\n';
for(int i = 1; i <= Lenl+1; i++) cout << ' ';
cout << ans.y << '\n';
}
}