提交时间:2024-08-20 20:48:37
运行 ID: 169971
#include <iostream> #include <algorithm> #include <cstring> using namespace std; // int n,sum[50000],ans[50000],t[50000]; struct Node { int l,r; int lcr; } s[1003]; inline bool cmp(Node & x,Node & y) { if (x.lcr==y.lcr) return x.r<y.r; return x.lcr<y.lcr; } // inline void cheng(int num) { int x=0; for (int i=1;i<=sum[0];++i) { sum[i]*=num; sum[i]+=x; x=sum[i]/10;//进位 sum[i]%=10; if (sum[sum[0]]) ++sum[0]; } } // inline bool check() { for (int i=1;i<=t[0];++i) { if (t[i]!=ans[i]) return t[i]>ans[i]; } return 0; } void solve(int x) { memset(t,0,sizeof(t)); int num=0,i=sum[0]+1,s=0; while (num<x) num=num*10+sum[--i]; t[0]=i; for (;i>=1;--i) { t[++s]=num/x; num=num%x*10+sum[i-1]; } if (t[0]>=ans[0] && check())//t比ans大,就更新ans { for (int i=0;i<=t[0];++i)//这里i要从0开始! ans[i]=t[i]; } } // int main() { scanf("%d",&n); for (int i=0;i<=n;++i) { scanf("%d%d",&s[i].l,&s[i].r); s[i].lcr=s[i].l*s[i].r; } // sum[0]=1,sum[1]=s[0].l; ans[0]=1,ans[1]=0; sort(s+1,s+n+1,cmp); for (int i=1;i<=n;++i) { cheng(s[i].l); solve(s[i].lcr); } // for (int i=1;i<=ans[0];++i) { if (i<ans[0]) printf("%d",ans[i]); else printf("%d\n",ans[i]); } return 0; }