求助 80tps RE on #1 #5
查看原帖
求助 80tps RE on #1 #5
785704
jiawenbo楼主2024/8/27 10:44
#include <iostream>
#include <limits.h>
#include <cmath>
#include <algorithm>
using namespace std;
int bj(int a,int b,int c,int d)
{
	if (a * d <= b * c) return 1;
	if (a * d > b * c) return 2;
}
int main()
{
	int m,n;
	double x;
	cin>>m>>n>>x;
	int a,b;
	bool f = false;
	double minn = INT_MAX;
	int fz,fm;
	int i;
	for (i = 1; i <= n; i ++)
	{
		int t1,t2;
		t1 = round(i * x);
		t2 = round(i * x) + 1;
		if (t1 > m) break;
		else if (t2 > m)
		{
			a = t1,b = i;
			if (abs(a * 1.0 / b - x) < minn) minn = abs(a * 1.0 / b - x),f = false;
			else if (abs(a * 1.0 / b - x) == minn) f = true;
		}
		else
		{
			int f = bj(t1,i,t2,i);
			if (f == 1) a = t1,b = i;
			else a = t2,b = i;
//			cout<<t1<<' '<<t2<<' '<<i<<' '<<f<<' ';
//			printf ("%.10lf %.10lf\n",abs(a * 1.0 / b),abs((a * 1.0 / b) - x));
			if (abs(a * 1.0 / b - x) < minn) minn = abs(a * 1.0 / b - x),fz = a,fm = b,f = false;
			else if (abs(a * 1.0 / b - x) == minn) f = true;
		}
	}
	if (!f)
	{
		int p = __gcd(fz,fm);
		cout<<fz / p<<'/'<<fm / p;
	}else cout<<"TOO MANY";
	return 0;
}
2024/8/27 10:44
加载中...