感觉是sort的问题,总是排序错误 ......
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,y;
string b,c;
struct com{string l,r,z;};
com a[1005];
//!!!
bool cm(com x,com y)
{
if (x.z.size()!=y.z.size())
return x.z.size()<y.z.size();
else
{
for (int i=0;i<x.z.size();i++)
{
if (x.z[i]<y.z[i])
return 1;
}
return 0;
}
//return x.z<y.z;
}
string cmm(string x,string y)
{
int a[5005]={0},b[5005]={0},c[5005]={0},lena=0,lenb=0,lenc=0,x1=0;
lena=x.size(),lenb=y.size();
for (int i=0;i<lena;i++)
a[lena-i]=x[i]-48;
for (int i=0;i<lenb;i++)
b[lenb-i]=y[i]-48;
for (int i=0;i<=lena;i++)
{
x1=0;
for (int j=1;j<=lenb;j++)
{
c[i+j-1]=c[i+j-1]+a[i]*b[j]+x1;
x1=c[i+j-1]/10;
c[i+j-1]=c[i+j-1]%10;
}
c[i+lenb]=x1;
}
lenc=lenb+lena;
while (c[lenc]==0 && lenc>1)
lenc--;
string z="";
for (int i=lenc;i>=1;i--)
z=z+char(c[i]+48);
return z;
}
string coo(string x1,string y1)
{
int a1[5005]={0},c1[5005]={0},lena1=0,x2=0,lenc1=0,b1=0;
for (int i=0;i<y1.size();i++)
b1=b1*10+(y1[i]-48);
lena1=x1.size();
for (int i=0;i<lena1;i++)
a1[i+1]=x1[i]-48;
for (int i=1;i<=lena1;i++)
{
c1[i]=(x2*10+a1[i])/b1;
x2=(x2*10+a1[i])%b1;
}
lenc1=1;
while (c[lenc1]==0 && lenc1<lena1)
lenc1++;
string z1="";
for (int i=lenc1;i<=lena1;i++)
z1=z1+char(c1[i]+48);
return z1;
}
int main()
{
cin>>n>>b>>y;
for (int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
a[i].z=cmm(a[i].l,a[i].r);
}
//!!!
sort(a+1,a+n+1,cm);
/*for (int i=1;i<=n;i++)
{
cout<<a[i].l<<" "<<a[i].r<<endl;;
}*/
for (int i=1;i<=n;i++)
{
c=coo(b,a[i].r);
b=cmm(b,a[i].l);
}
cout<<c;
return 0;
}