Problem 2 西行寺幽幽子(spring.cpp/c/pas)

时间:2020-11-27 04:03:10

 Problem 2  西行寺幽幽子(spring.cpp/c/pas)
题目描述  在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵。不过幽幽子可不是只会吃,至少她还管理着
亡灵界。话说在幽幽子居住的白玉楼有一颗常年不开花的樱树——西行妖。幽幽子决定去收集
人间的春度,聚集起来让西行妖开花。很快,作为幽幽子家园艺师的魂魄妖梦收集到了 M 个
单位的春度。并且在这段时间里,幽幽子计算出要让西行妖开出一朵花需要 N 个单位的春度。
现在幽幽子想要知道,使用所有的春度,能够让西行妖开出多少朵花。
输入格式  第 1 行:一个正整数 M
第 2 行:一个正整数 N
N,M 的位数不超过L,L 的范围在题目后面给出
输出格式  第 1 行:一个整数ans,表示能开出花的朵数
输入样例  73861758
12471
输出样例  5922
数据范围  对于 60%的数据:L <= 2,000 且 ans <= 2,000
对于 100%的数据:L <= 20,000 且 ans <= 2,000,000,000

 

const md=10000;
max=2000000000;
type arr=array[0..20000] of int64;
var n,m,now:arr;
s:ansistring;
i,j,k,sum:longint;
l,r,mid:int64;//fuck 
procedure change(var a:arr);
var i,len:longint;
s0:string;
begin
 len:=length(s);
 {for i:=1 to len do
  a[i]:=ord(s[len-i+1])-ord('0');
 a[0]:=len;}
 while length(s)>=4 do
  begin
   s0:=copy(s,length(s)-3,4);
   inc(a[0]); val(s0,a[a[0]]);
   delete(s,length(s)-3,4);
  end;
 if s<>'' then
  begin
   inc(a[0]); val(s,a[a[0]]);
  end;
end;
procedure cheng;
var i:longint;
begin
 now:=n; now[1]:=now[1]*mid;
 for i:=2 to now[0] do
  begin
   now[i]:=now[i]*mid+now[i-1] div md;
   now[i-1]:=now[i-1] mod md;
  end;
 while now[now[0]]>md do
  begin
   inc(now[0]); now[now[0]]:=now[now[0]-1] div md;
   now[now[0]-1]:=now[now[0]-1] mod md;
  end;
end;
function ok:boolean;
var i:longint;
begin
 cheng;
 if now[0]>m[0] then exit(false);
 if m[0]>now[0] then exit(true);
 for i:=now[0] downto 1 do
  if now[i]>m[i] then exit(false)
  else if now[i]<m[i] then exit(true);
 exit(true);
end;
begin
 assign(input,'spring.in'); assign(output,'spring.out');
 reset(input); rewrite(output);
 readln(s); change(m);
 readln(s); change(n);
 l:=0; r:=max;
 {mid:=5984; cheng;}
 while r-l>1 do
  begin
   mid:=(r+l) div 2;
   if ok then l:=mid else r:=mid;//fuck
  end;
 writeln(l);
 close(input); close(output);
end.