70 pts求调
查看原帖
70 pts求调
774999
chenly8128楼主2024/11/12 20:34

本人没有使用类欧几里得算法,而是使用了一种黑科技。我自己造的数据好像都没问题,但是有三个点会超时。 有人能给个黑客数据吗


// 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;
}
2024/11/12 20:34
加载中...