【听灌多】P1080国王游戏 (玄关)
  • 板块灌水区
  • 楼主Rolen
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/18 20:30
  • 上次更新2024/10/18 22:21:26
查看原帖
【听灌多】P1080国王游戏 (玄关)
730113
Rolen楼主2024/10/18 20:30

rt

WA on #5 #7 #8 #9

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,b,base=10;
pair<ll,ll>p[10003];
string a;
bool cmp(pair<ll,ll>x,pair<ll,ll>y){
	return x.first*x.second<y.second*y.first;
}
struct bignum{//only mul ,comp ans so on
	int a[100005],len;
	bignum() {//初始化
		memset(a,0,sizeof(a));
		len = 1;
	}
	void resize(){//限制位数
		len = 100005;
		for(int i = len - 1;i >= 0;i--)
			if( a[i] > 0 ) { 
				len = i + 1;
				return;
			}
		len = 1;
	}
	bool operator < (const bignum &b) const{//比大小
		if ( len != b.len) return len < b.len;
		for(int i = len - 1 ;i >= 0 ;i--){
			if(a[i] != b.a[i]) return a[i] < b.a[i];
		}
		return 0;
	}
	bignum operator * (const int &b) const{ //乘法(高精乘int)
		bignum c;
		for(int i = 0; i < len ;i++){
			c.a[i] += a[i] * b;
			if( c.a[i] >= base) {
				c.a[i+1] += c.a[i]/base;
				c.a[i] %= base;
			}
		}
		c.resize();
		return c;
	}
	
	bignum operator / (const int &b) const{//除法(高精除int)
		ll temp = 0;
		bignum c;
		if( b == 0) {
			printf("Error!");
			return c;
		}
		for(int i = len -1;i >= 0;i--){
			temp = temp * base + a[i];
			if(temp >= b) {
				c.a[i] = temp / b;
				temp %= b;
			}
		}
		c.resize();
		return c;
	}
	
	void print (){//输出
		resize();
		printf("%d",a[len-1]);
		if ( len > 1) 
		for(int i = len - 2;i >=0;i--){
			printf("%d",a[i]);
		}
		return;
	}
}res,mx;
int main(){
	res.a[0]=1;
	cin>>n;
	for(int i=0;i<=n;i++) cin>>p[i].first>>p[i].second;
	sort(p+1,p+1+n,cmp);
	for(int i=0;i<n;i++){
		if(mx<res/p[i].second){
			mx=res/p[i].second;
		}
		res=res*p[i].first;
	}
	if(mx<res/p[n].second){
		mx=res/p[n].second;
	}
	mx.print();
}
2024/10/18 20:30
加载中...