社区讨论

60pts 求条

P1080[NOIP 2012 提高组] 国王游戏参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mkfno7hq
此快照首次捕获于
2026/01/16 00:20
上个月
此快照最后确认于
2026/01/16 17:44
上个月
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

struct Node
{
	int a[5010],len;
	Node()
	{
		len=1;
		memset(a,0,sizeof a);
	}
};
void output(Node x)//高精度输出
{
	for(int i = x.len;i >= 1;i--)	
		cout<<x.a[i];
}
bool operator <(Node a,Node 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 0;
}
Node operator *(Node a,int b)//高精度乘单精度重载
{
	Node c;
	c.len=a.len;
	for(int i = 1;i <= c.len;i++)
	{
		c.a[i]=a.a[i]*b;
	}
	for(int i = 1;i <= c.len;i++)
	{
		c.a[i+1]+=c.a[i]/10;
		c.a[i]%=10;
	}
	while(c.a[c.len+1]>0)
	{
		c.len++;
		c.a[c.len]+=c.a[c.len-1]/10;
		c.a[c.len-1]%=10;
	}
	return c;
}
Node operator /(Node a,int b)//高精度除单精度重载
{
	Node c;
	c.len=a.len;
	long long ret = 0; 
	for(int i = c.len;i >= 1;i--)
	{
		c.a[i]=(a.a[i]+ret*10)/b;
		ret=(a.a[i]+ret*10)%b;
	}
	while(c.len>1&&c.a[c.len]==0)
		c.len--;
	return c;
}
struct person
{
	int l,r;
}p[1005];
bool cmp(person a,person b)
{
	return a.l*a.r<b.l*b.r;
}
Node mul,maxn;
int main()
{
    ios::sync_with_stdio(0);
    int n;
    cin>>n;
    for(int i = 1;i <= n+1;i++)
    	cin>>p[i].l>>p[i].r;
	sort(p+2,p+n+2,cmp);
	mul.a[1]=1;
	mul=mul*p[1].l;
	for(int i = 2;i <= n+1;i++)
	{
		Node y = mul/p[i].r;
		if(maxn<y)
			maxn=y;
		mul=mul*p[i].l;
	}
	output(maxn);
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...