这是一百分,但是最后一个附加测试点没过的程序
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int n;
string aa,bb,num;
struct st{
string a,b;
}s[100100];
int xxx[10010],yyy,xxxyyy[100010];
string chu(string x,string y){
yyy=0;
memset(xxxyyy,0,sizeof xxxyyy);
for(int i=0;i<x.size();i++) xxx[i+1]=x[i]-'0';
for(int i=0;i<y.size();i++){
yyy+=y[i]-'0';
yyy*=10;
}
yyy/=10;
//cout<<yyy<<endl;
for(int i=1;i<=x.size();i++){
xxxyyy[i]=xxx[i]/yyy;
xxx[i+1]+=10*(xxx[i]%yyy);
}
int i=0;
while(xxxyyy[i]==0 && i<x.size()) i++;
string g="";
for(;i<=x.size();i++) g+=xxxyyy[i]+'0';
return g;
}
int xx[10010],yy[10010],xxyy[100010];
string cheng(string x,string y){
memset(xxyy,0,sizeof xxyy);
for(int i=0;i<x.size();i++) xx[x.size()-i]=x[i]-'0';
for(int i=0;i<y.size();i++) yy[y.size()-i]=y[i]-'0';
for(int i=1;i<=x.size();i++){
for(int j=1;j<=y.size();j++){
xxyy[i+j-1]+=xx[i]*yy[j];
}
}
int len=x.size()+y.size();
for(int i=1;i<len;i++){
if(xxyy[i]>=10){
xxyy[i+1]+=xxyy[i]/10;
xxyy[i]%=10;
}
}
while(xxyy[len]==0 && len>1) len--;
string g="";
for(int i=len;i>=1;i--) g+=xxyy[i]+'0';
return g;
}
bool check(st x,st y){
string xxx=cheng(x.a,x.b),yyy=cheng(y.a,y.b);
if(xxx.size()==yyy.size()) return xxx<yyy;
return xxx.size()<yyy.size();
}
bool cmp(st c,st d){
return check(c,d);
}
int main(){
// cout<<cheng("10230","3000");
cin>>n;
string x,y;
cin>>x>>y;
for(int i=1;i<=n;i++){
cin>>s[i].a>>s[i].b;
}
sort(s+1,s+1+n,cmp);
// cout<<endl;
// for(int i=1;i<=n;i++){
// cout<<s[i].a<<" "<<s[i].b<<endl;
// }
//
num=x;
string d="";
for(int i=1;i<n;i++){
num=cheng(num,s[i].a);
}
d=chu(num,s[n].b);
if(d.size()==1){
int l=d[0]-'0';
if(l<1){
cout<<1;
return 0;
}
}
cout<<d;
}
这是九十分但第十个测试点没过的程序
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int n;
string aa,bb,num;
struct st{
string a,b;
}s[100100];
int xxx[10010],yyy,xxxyyy[100010];
string chu(string x,string y){
yyy=0;
memset(xxxyyy,0,sizeof xxxyyy);
for(int i=0;i<x.size();i++) xxx[i+1]=x[i]-'0';
for(int i=0;i<y.size();i++){
yyy+=y[i]-'0';
yyy*=10;
}
yyy/=10;
//cout<<yyy<<endl;
for(int i=1;i<=x.size();i++){
xxxyyy[i]=xxx[i]/yyy;
xxx[i+1]+=10*(xxx[i]%yyy);
}
int i=0;
while(xxxyyy[i]==0 && i<x.size()) i++;
string g="";
for(;i<=x.size();i++) g+=xxxyyy[i]+'0';
return g;
}
int xx[10010],yy[10010],xxyy[100010];
string cheng(string x,string y){
memset(xxyy,0,sizeof xxyy);
for(int i=0;i<x.size();i++) xx[x.size()-i]=x[i]-'0';
for(int i=0;i<y.size();i++) yy[y.size()-i]=y[i]-'0';
for(int i=1;i<=x.size();i++){
for(int j=1;j<=y.size();j++){
xxyy[i+j-1]+=xx[i]*yy[j];
}
}
int len=x.size()+y.size();
for(int i=1;i<len;i++){
if(xxyy[i]>=10){
xxyy[i+1]+=xxyy[i]/10;
xxyy[i]%=10;
}
}
while(xxyy[len]==0 && len>1) len--;
string g="";
for(int i=len;i>=1;i--) g+=xxyy[i]+'0';
return g;
}
bool check(st x,st y){
string xxx=cheng(x.a,x.b),yyy=cheng(y.a,y.b);
if(xxx.size()==yyy.size()) return xxx<yyy;
return xxx.size()<yyy.size();
}
bool cmp(st c,st d){
return check(c,d);
}
int main(){
// cout<<cheng("10230","3000");
cin>>n;
string x,y;
cin>>x>>y;
for(int i=1;i<=n;i++){
cin>>s[i].a>>s[i].b;
}
sort(s+1,s+1+n,cmp);
// cout<<endl;
// for(int i=1;i<=n;i++){
// cout<<s[i].a<<" "<<s[i].b<<endl;
// }
//
num=x;
string d="";
for(int i=1;i<n;i++){
//cout<<num<<" "<<s[i].b<<endl;
//cout<<d<<endl;
num=cheng(num,s[i].a);
}
d=chu(num,s[n].b);
cout<<d;
}
求助!