只有10分,A第一个点,大佬求助

P1080 [NOIP2012 提高组] 国王游戏

``` #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<string> using namespace std; int n;//n个大臣 struct node{ int l,r; }; node p[1005]; bool cmp(node i,node j){ return max(j.r,i.l*i.r)<max(i.r,j.l*j.r); } int s[4005],t[4005],ans[4005];//s 积 t 商 ans 最大值 int Len=4005;//表示字符数组的长度 void cheng(int d){//高精度乘 int 存到s for(int i=1;i<=Len;i++) s[i]*=d; for(int i=1;i<=Len;i++){ s[i+1]+=s[i]/10;//向前进位 s[i]=s[i]%10; //保留个位 } } void chu(int d){//高精度除 整数 memset(t,0,sizeof(t)); int r=0; for(int i=Len;i>=1;i--){ r=r*10+s[i]; t[i]=r/d; r=r%d; } } bool f(){//高精度比较 t[] ans[] for(int i=Len;i>=1;i--){ if(t[i]>ans[i]) return true; if(t[i]<ans[i]) return false; } return false; } void cpy(){//高精度赋值 把t[]赋值给ans[] for(int i=1;i<=Len;i++) ans[i]=t[i]; } void print(){//高精度输出 ans[] //去前导0 while(ans[Len]==0&&Len>1) Len--; for(int i=Len;i>=1;i--) cout<<ans[i]; } int main(){ cin>>n; for(int i=0;i<=n;i++) cin>>p[i].l>>p[i].r; sort(p+1,p+n+1,cmp); s[1]=1; for(int i=1;i<=n;i++){ cheng(p[i-1].l);//高精度乘 s[] chu(p[i].r);//高精度除 t[] if(f()) cpy();//高精度比较 高精度赋值 } print();//高精度输出 return 0; } ```
by xuzihan1 @ 2024-05-13 08:54:44


|