所有样例全部RE了
但是能过样例,高精乘和高精除自测没有问题
下了第一个点,在自己的IDE上测试可过
应该不会有数组越界,不太清楚为啥都RE
qwq
#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
typedef long long ll ;
ll t,n,k;
typedef struct{
char sa[4005];
char sb[4005];
}Node;
Node arr[1001];
char * pro;
int a[205];
int b[205];
char * mul(char A[],char B[])
{
int c[205];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
char res[205];
int lena = strlen(A);
int lenb = strlen(B);
int len = lena + lenb;
for (int i = lena - 1; i >= 0; i--){
a[lena - i] = A[i] - '0';
}
for (int i = lenb - 1; i >= 0; i--){
b[lenb - i] = B[i] - '0';
}
for (int i = 1; i <= lena; i++){
for (int j = 1; j <= lenb; j++){
c[i + j - 1] += a[i] * b[j];
}
}
for (int i = 1; i <= len; i++){
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
while(c[len]==0&&len!=0){
len--;
}
if(len==0){
res[0]='0';
res[1]='\0';
}else{
for(int i=len;i>=1;i--){
res[len-i]=c[i]+'0';
}
res[len]='\0';
}
return &res[0];
}
char * div(char s[],ll b)
{
int lena = strlen(s);
int c[205];
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
ll x=0;
char res[205];
for (int i = 1; i <= lena; i++){
a[i] = s[i - 1] - '0';
}
for (int i = 1; i <= lena; i++){
c[i] = (x * 10 + a[i]) / b;
x = (x * 10 + a[i]) % b;
}
int lenc = 1;
while (c[lenc] == 0 && lenc<lena){
lenc++;
}
for (int i = lenc; i <= lena; i++){
res[i-lenc]=c[i]+'0';
}
res[lena-lenc+1]='\0';
return &res[0];
}
bool cmp(Node a,Node b)
{
return atoi(mul(a.sa,a.sb))<atoi(mul(b.sa,b.sb));
}
int main()
{
ios::sync_with_stdio(false);
int i,j;
char king1[205];
char res[205];
char str[205];
char * ans;
cin>>n;
ll l=0,temp;
cin>>king1>>temp;
for(i=0;i<=n-1;i++){
cin>>arr[i].sa>>arr[i].sb;
}
sort(arr,arr+n,cmp);
res[0]='0';res[1]='\0';
str[0]='0';str[1]='\0';
ans=&str[0];
res[0]='1';
pro=mul(res,king1);
for(i=0;i<=n-1;i++){
temp=atoi(div(pro,atoi(arr[i].sb)));
if(atoi(ans)<temp){
ans=div(pro,atoi(arr[i].sb));
}
pro=mul(pro,arr[i].sa);
}
cout<<ans<<endl;
return 0;
}