Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
137595 付明澄 国王游戏 C++ 通过 100 30 MS 504 KB 1415 2024-03-11 14:00:40

Tests(10/10):


#include<bits/stdc++.h> using namespace std; int sum[50000],ans[50000],t[50000]; int n; struct node { int l,r,lr; }pp[1009]; bool cmp(node x,node y) { if(x.lr!=y.lr) return x.lr<y.lr; return x.r<y.r; } void cheng(int x) { for(int i=1;i<=sum[0];i++) { sum[i]*=x; } int i; for(i=1;i<=sum[0];i++) { sum[i+1]+=sum[i]/10; sum[i]%=10; if(i==sum[0]&&sum[sum[0]+1]!=0) sum[0]++; } } bool judge() { for(int i=1;i<=t[0];i++) { if(t[i]!=ans[i]) { return t[i]>ans[i]; } } } void solve(int x) { int num=0,i=sum[0]+1,s=0; memset(t,0,sizeof(t)); while(num<x) { --i; 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] || t[0]==ans[0] && judge()) { for(int i=0;i<=t[0];i++) ans[i]=t[i]; } } int main() { scanf("%d",&n); for(int i=0;i<=n;i++) { scanf("%d%d",&pp[i].l,&pp[i].r); pp[i].lr=pp[i].l*pp[i].r; } sum[1]=pp[0].l; sum[0]=1; ans[1]=0; ans[0]=1; sort(pp+1,pp+n+1,cmp); for(int i=1;i<=n;i++) { cheng(pp[i].l); solve(pp[i].lr); } for(int i=1;i<=ans[0];i++) i<ans[0]?printf("%d",ans[i]):printf("%d\n",ans[i]); return 0; }


测评信息: