题目连接
我的代码如下:
#include<bits/stdc++.h>
using namespace std;
struct date{
long long a,b,j;
}c[1005];
bool cmp(date x,date y){
return x.j<y.j;
}
int ans[4005]={1},ans1[4005],ans3[4005];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<=n;i++){
scanf("%lld%lld",&c[i].a,&c[i].b);
c[i].j=c[i].a*c[i].b;
}
sort(c+1,c+n+1,cmp);
for(int i=0;i<=n;i++){
int len=4003;
memset(ans1,0,sizeof(ans1));
if(i!=0){
long long t=0;
long long cnt=0;
for(int j=len;j>=0;j--){
t=t*10+ans[j];
ans1[j]=t/c[i].b;
t%=c[i].b;
cnt=cnt*10+ans1[j];
}
//以上是高精除低精
int flag=0;
for(int j=len;j>=0;j--){
if(ans1[j]<ans3[j]) break;
if(ans1[j]>ans3[j]){
flag=1;
break;
}
}
//以上为比大小
if(flag)
for(int j=len;j>=0;j--)
ans3[j]=ans1[j];
}
for(int j=len;j>=0;j--){
ans[j]*=c[i].a;
ans[j+1]+=ans[j]/10;
ans[j]%=10;
}
//高精度乘法
}
int len=4003;
while(ans3[len]==0&&len>=1)
len--;
//去前导零
for(int j=len;j>=0;j--)
printf("%d",ans3[j]);
return 0;
}
//WA on #5 #7~9
我把#5下了下来,输出出了这个东西……
816982-159986-2026237-504096-1487992160663786568520638211765782-611122942222-39614-2324802-1725931693252-3214022446193-700590130902440809235916712234238992644052222363249-178735-2370769104125989052-454501-184207868269721301391165785-6288851691261-614376-693867-16415632101538-2430303-748163-1435936-982196-21064271207380-360406250614-37174-2102775599335-1401936130734-2729512860681785165160382-17089531335530-182983921028161807454323190-847842970840-146738318087382466077-11925511408267175980024349494625084966543513104981112643678160919540
求大佬帮忙解答