Tyvj 1316 小Q玩游戏——开采金币

题目:

 小Q玩游戏——开采金币

来源:

 Tyvj 1316

题目大意:

 S次操作,可以建矿塔,可以采矿,采矿每次采已有矿塔数的矿,初始为0矿塔,求  最大采矿数。

数据范围:

 S<=10^100

样例:

 1

0

做题思路:

 看题意很清晰,但我不是大牛,不知道这和高精度有什么直接关系?难道只是用高精  度来处理数?额。。原来是有个式子可以直接出解

  Ans=(s/2)^2

知识点:

 高精度乘除(万进制)

var
 a1,a2,a:array[0..70]of longint;
 s,s1:string;
 l:longint;
procedure init;
var
 i,j:longint;
begin
 readln(s);
 l:=length(s);
 j:=ldiv 4;
 ifj*4<l then inc(j);
 fori:=1 to j do
 begin
   ifl-i*4+1>0 then s1:=copy(s,l-i*4+1,4)
   else s1:=copy(s,1,l-(i-1)*4);
  val(s1,a1[i]);
 end;
 a1[0]:=j;
 while (a1[0]>0)and(a1[a1[0]]=0) dodec(a1[0]);
end;
procedure print;
var
 i:longint;
begin
 while (a[a[0]]=0)and(a[0]>0) do dec(a[0]);
 ifa[0]=0 then writeln('0')
 else
  begin
    write(a[a[0]]);
   for i:=a[0]-1 downto 1 do
     case a[i] of
      0..9:write('000',a[i]);
      10..99:write('00',a[i]);
      100..999:write('0',a[i]);
     else write(a[i]);
     end;
   writeln;
  end;
 fillchar(a,sizeof(a),0);
end;
procedure minu;
var
 i,k:longint;
begin
 k:=0;
 fori:=a[0] downto 1 do
 begin
  a[i]:=a[i]+k*10000;
  k:=a[i] mod 4;
  a[i]:=a[i] div 4;
 end;
 while a[a[0]]=0 do dec(a[0]);
end;
procedure mult;
var
 i,j:longint;
begin
 fillchar(a,sizeof(a),0);
 fori:=1 to a1[0] do
  forj:=1 to a2[0] do
  begin
   a[i+j-1]:=a1[i]*a2[j]+a[i+j-1];
   a[i+j]:=a[i+j]+a[i+j-1] div 10000;
   a[i+j-1]:=a[i+j-1] mod 10000;
  end;
 a[0]:=a1[0]+a2[0];
 ifa[a[0]+1]>0 then inc(a[0]);
end;
begin
 init;
 if(a1[0]=1)and(a1[a1[0]]=1)then
 begin
  writeln('0');
  halt;
 end;
 a2:=a1;
 mult;
 minu;
 print;
end.
题目来源: http://www.tyvj.cn:8080/Problem_Show.asp?id=1316

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值