本人没有使用类欧几里得算法,而是使用了一种黑科技。我自己造的数据好像都没问题,但是有三个点会超时。 有人能给个黑客数据吗
// Author: chenly8128
// Created: 2024-11-11 21:08:34
#include <bits/stdc++.h>
using namespace std;
int n;
double pt;long double T;
typedef long long ll;
const long double eps = 5e-31;
int main (void) {
while (scanf ("%d%Lf",&n,&T) != EOF) {
if (T < eps) {
printf ("1\n");
continue;
}
long double l = T,r = T;
long double tmp = 1;
for (int i = 1;i <= n;i++) tmp /= 10;
r += tmp/2; l -= tmp/2;
ll k = floor(1/r);
ll a = 0,b = 1,c = 1,d = k;
long double f = ((long double)c) / d;
if (l <= f && f < r-eps) {
printf ("%lld\n",d);
continue;
}
while (true) {
ll p = a + c;
ll q = b + d;
long double f = (long double)p / q;
// printf ("%.20Lf %.20Lf\n",f,r);
if (f >= l && f < r-eps) {
printf ("%lld\n",q);
break;
}
if (f > T) {
c = p;
d = q;
}
else {
a = p;
b = q;
}
}
}
return 0;
}