P1080国王游戏,写了高精还是只有60分(是我菜),求调!
以下是代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}a[1001];
bool cmp(node x,node y){
return x.x*x.y<y.x*y.y;
}
int s[1001],m[1001],p[1001],ls,lm,lp;
int n;
void cheng(int x){
for(int i=1;i<=ls;i++)
s[i]*=x;
for(int i=1;i<=ls;i++){
s[i+1]+=s[i]/10;
s[i]%=10;
}
while(s[ls+1]!=0)ls++;
}
void Max(int x){
lp=ls;
int d=0;
bool f=0;
for(int i=ls;i>=1;i--){
d=d*10+s[i];
p[i]=d/x;
if(p[i]==0&&f==0)lp--;
else f=1;
d%=x;
}
if(lp>lm){
lm=lp;
for(int i=1;i<=lp;i++)
m[i]=p[i];
}
if(lp==lm){
f=0;
for(int i=lp;i>=1;i--){
if(p[i]>m[i]){
f=1;
break;
}
if(p[i]<m[i])
break;
}
if(f==1)
for(int i=1;i<=lp;i++)
m[i]=p[i];
}
}
int main(){
cin>>n;
for(int i=1;i<=n+1;i++)
cin>>a[i].x>>a[i].y;
sort(a+2,a+n+2,cmp);
s[++ls]=1;
for(int i=2;i<=n+1;i++){
cheng(a[i-1].x);
Max(a[i].y);
}
for(int i=lm;i>=1;i--)
cout<<m[i];
return 0;
}