失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > noip模拟赛 西行寺幽幽子 高精度除法

noip模拟赛 西行寺幽幽子 高精度除法

时间:2022-12-13 21:55:24

相关推荐

noip模拟赛  西行寺幽幽子  高精度除法

西行寺幽幽子

时间限制: 1 Sec内存限制:128 MB

题目描述

在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵。不过幽幽子可不是只会吃,至少她还管理着亡灵界。话说在幽幽子居住的白玉楼有一颗常年不开花的樱树——西行妖。幽幽子决定去收集人间的春度,聚集起来让西行妖开花。很快,作为幽幽子家园艺师的魂魄妖梦收集到了M个单位的春度。并且在这段时间里,幽幽子计算出要让西行妖开出一朵花需要N个单位的春度。现在幽幽子想要知道,使用所有的春度,能够让西行妖开出多少朵花。

输入

第1行:一个正整数M

第2行:一个正整数N

N,M的位数不超过L,L的范围在题目后面给出

输出

第1行:一个整数ans,表示能开出花的朵数

样例输入

7386175812471

样例输出

5922

提示

对于60%的数据:L<=2,000且ans<=2,000

对于100%的数据:L<=20,000且ans<=2,000,000,000

高精度除法,ans的数据范围有优势 ,用二分

#include<iostream>#include<cstring>#include<cmath>#include<cstdio>#include<cstdlib>#include<iomanip>#include<algorithm>#define ll long long#define inf 1000000000using namespace std;int lm,ln,lt,ans;ll m[50005],n[50005];ll t[50005];char ch[50005];bool judge(ll x){memset(t,0,sizeof(t));for(int i=1;i<=ln;i++)t[i]=n[i]*x;lt=ln;for(int i=1;i<=lt;i++){if(t[i]>=10)lt=max(lt,i+1);t[i+1]+=t[i]/10;t[i]%=10;}//cout<<lm<<" "<<lt<<endl;if(lt>lm)return 0;else if(lt<lm)return 1;else {for(int i=lt;i;i--)if(t[i]>m[i])return 0;else if(t[i]<m[i])return 1;return 1;}}int main(){scanf("%s",ch+1);lm=strlen(ch+1);for(int i=1;i<=lm;i++)m[i]=ch[lm-i+1]-'0';scanf("%s",ch+1);ln=strlen(ch+1);for(int i=1;i<=ln;i++)n[i]=ch[ln-i+1]-'0';ll l=0,r=2000000000;while(l<=r){ll mid=(l+r)>>1;if(judge(mid))ans=mid,l=mid+1;else r=mid-1;//cout<<mid<<endl;}printf("%d",ans);return 0;}

如果觉得《noip模拟赛 西行寺幽幽子 高精度除法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。