社区讨论
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 条回复,欢迎继续交流。
正在加载回复...