求助,高精度
查看原帖
求助,高精度
955580
LOSpace楼主2023/8/11 13:35
#include<bits/stdc++.h>
using namespace std;
int n, l, r;
struct node{
	int a;
	int b;
} t[1005] = {{1, 0}};
bool cmp(node x, node y){
	return x.a * x.b < y.a * y.b;
}
struct Bigint {
	static const int N = 10005;
	int number[N], len;
	Bigint(int a = 0) {
		memset(number, 0, sizeof number);
		for (len = 0; a; len ++){
			number[len] = a % 10;
			a /= 10;
		}
	}
	int &operator[](int i) {
		return number[i];
	}
	void print() {
		for (int i = max(len, 0); i >= 0; i --)
			putchar(number[i] + 48);
	}
};
Bigint Big_times(Bigint a, int b) {
	Bigint c;
	c.len = a.len;
	for (int i = 0; i < a.len; i ++)
		c[i] = a[i] * b;
	a.len += 11;
	for (int i = 0; i < a.len; i ++){
		c[i + 1] += c[i] / 10;
		c[i] %= 10;
	}
	for (; !c[c.len]; c.len --);
	return c;
}
Bigint Big_div(Bigint a, int b) {
	for (int i = 0; i < a.len; i ++)
		a[i + 1] += a[i] % b * 10, a[i] /= b;
	a.len += 11;
	for (; !a[a.len]; a.len --);
	return a;
}
bool operator<(Bigint a, Bigint b) {
	if (a.len == b.len){
		for (int i = a.len - 1; i >= 0; i --)
			if (a[i] != b[i])
				return a[i] < b[i];
		return false;
	}
	return a.len < b.len;
}
int main(){
    scanf("%d%d%d", &n, &l, &r);
    Bigint cnt = l, ans;
    for (int i = 1; i <= n; i ++)
        scanf("%d%d", &t[i].a, &t[i].b);
    sort(t + 1, t + n + 1, cmp);
    for (int i = 1; i <= n; i ++){
    	cnt = Big_times(cnt, t[i - 1].a);
    	Bigint k = Big_div(cnt, t[i].b);
    	if (i == 1 || ans < k)
    		ans = k;
	}
	ans.print();
    return 0;
}
2023/8/11 13:35
加载中...