五彩斑斓的WA求条
查看原帖
五彩斑斓的WA求条
930718
Eason_lyx楼主2025/8/4 16:03

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n;
struct person{
    int a,b;
    bool operator<(const person &bb)const{
        return (1ll*a*b)<(1ll*bb.a*bb.b);
    }
}man[N];
struct bigint{
	int a[N],len;
	bigint(){
		len=1;
		memset(a,0,sizeof a);
	}
};
bigint s2b(string s) {
	bigint ret;
	ret.len=s.size();
	for(int i=1;i<=ret.len;++i)
		ret.a[i]=s[ret.len-i]-'0';
	return ret;
}
bigint operator +(bigint a,bigint b) {
	bigint ret;
	ret.len=max(a.len,b.len);
	for(int i=1; i <= ret.len;++i) 
		ret.a[i] = a.a[i] + b.a[i];
	for(int i=1; i <= ret.len;++i)
		if(ret.a[i]>=10)
			ret.a[i] -= 10, ++ret.a[i + 1];
	if(ret.a[ret.len + 1])
		++ret.len;
	return ret;
}
bigint operator -(bigint a,bigint b) {
	bigint ret;
	ret.len=a.len;
	for(int i = 1; i <=ret.len; ++i)
		ret.a[i] = a.a[i] - b.a[i];
	for(int i = 1; i <=ret.len; ++i)
		if(ret.a[i] < 0)
			ret.a[i] += 10, --ret.a[i + 1];
	while(ret.len> 1 && !ret.a[ret.len])
		--ret.len;
	return ret;
}
bigint operator *(bigint a,int b) {
	bigint ret;
	ret.len=a.len;
	for(int i = 1; i <= ret.len; ++i)
		ret.a[i] = a.a[i] * b;
	for(int i = 1; i < ret.len; ++i)
		ret.a[i + 1] += ret.a[i] / 10, ret.a[i] %= 10;
	while(ret.a[ret.len] >= 10) {
		ret.a[ret.len+ 1] = ret.a[ret.len] / 10;
		ret.a[ret.len] %= 10;
		++ret.len;
	}
	return ret;
}
bigint operator /(bigint a,int b) {
	// re余数
	bigint ret;
	ret.len=a.len;
	int re = 0;
	for(int i = ret.len; i >= 1; --i) {
		re = re * 10 + a.a[i];
		ret.a[i] = re / b;
		re %= b;
	}
	while(ret.len > 1 && !ret.a[ret.len])
		--ret.len;
	return ret;
}
bool operator <(bigint a,bigint b) {
	if(a.len!=b.len)
		return a.len<b.len;
	for(int i =a.len; i >= 1; --i)
		if(a.a[i] != b.a[i])
			return a.a[i] < b.a[i];
	return false;
}
bool operator ==(bigint a,bigint b) {
	if(a.len!=b.len)
		return false;
	for(int i =a.len; i >= 1; --i)
		if(a.a[i] != b.a[i])
			return false;
	return true;
}
bool operator <=(bigint a,bigint b) {return a<b||a==b;}
bool operator >=(bigint a,bigint b) {return (a<b)==0;}
bool operator > (bigint a,bigint b) {return (a<=b)==0;}
bigint max(bigint a,bigint b){
    return (a<b?b:a);
}
void out(bigint a){
	for(int i = a.len; i >= 1; --i)
		cout << a.a[i];
	cout << endl;
}
int main(){
    cin>>n>>man[0].a>>man[0].b;
    for(int i=1;i<=n;i++)
        cin>>man[i].a>>man[i].b;
    sort(man+1,man+n+1);
    bigint ans,tmp;
    tmp=s2b(to_string(man[0].a));
    for(int i=1;i<=n;++i){
        ans=ans+tmp/man[i].b;
        tmp=tmp*man[i].a;
    }
    out(ans);
    return 0;
}
2025/8/4 16:03
加载中...