bzoj1263: [SCOI2006]整数划分
2017-04-13 21:47
260 查看
传送门
我们可以求出满足xx−1>(x−1)x且xx+1>(x+1)x的整数x
然后手玩一下发现x=3
所以要尽可能的多拆出3。
不难得到以下方案:
1.n%3==0 拆成n/3个3
2.n%3==1 拆成n/3-1个3,2个2
3.n%3==2 拆成n/3个3,1个2
高精度一发水过。
我们可以求出满足xx−1>(x−1)x且xx+1>(x+1)x的整数x
然后手玩一下发现x=3
所以要尽可能的多拆出3。
不难得到以下方案:
1.n%3==0 拆成n/3个3
2.n%3==1 拆成n/3-1个3,2个2
3.n%3==2 拆成n/3个3,1个2
高精度一发水过。
uses math; var a:array [0..5005] of longint; n,k,kk,i,j:longint; u:extended; begin read(n); if (n<=4) then begin writeln(1); write(n); exit; end; k:=n div 3; if n mod 3=1 then dec(k); kk:=(n-k*3) div 2; u:=k*ln(3)/ln(10)+kk*ln(2)/ln(10); writeln(trunc(u)+1); a[0]:=1; a[1]:=1; for j:=1 to k do begin for i:=1 to a[0] do a[i]:=a[i]*3; for i:=1 to a[0] do begin inc(a[i+1],a[i] div 10); a[i]:=a[i] mod 10; end; if (a[a[0]+1]<>0) then inc(a[0]); end; for j:=1 to kk do begin for i:=1 to a[0] do a[i]:=a[i]*2; for i:=1 to a[0] do begin inc(a[i+1],a[i] div 10); a[i]:=a[i] mod 10; end; if (a[a[0]+1]<>0) then inc(a[0]); end; for i:=a[0] downto max(a[0]-99,1) do write(a[i]); end.
相关文章推荐
- BZOJ1263: [SCOI2006]整数划分
- 【SCOI2006】【bzoj1263】整数划分
- 【BZOJ1263】【SCOI2006】整数划分 高精度+构造
- bzoj1263 [SCOI2006]整数划分
- 【杂谈】[scoi2006]整数划分
- bzoj 1263: [SCOI2006]整数划分
- bzoj1263: [SCOI2006]整数划分(高精度+构造)
- [BZOJ1263][SCOI2006]整数划分(数学+高精度)
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
- BZOJ 1263 [SCOI2006]整数划分 - 高精度乘法
- BZOJ 1263: [SCOI2006]整数划分
- 1263: [SCOI2006]整数划分
- 【bzoj1263】【scoi2006】【整数划分】【高精度+贪心】
- BZOJ 1263: [SCOI2006]整数划分 数学,高精度
- BZOJ 1263 SCOI2006 整数划分 高精度
- [BZOJ1263][SCOI2006]整数划分
- 【bzoj1263】[SCOI2006]整数划分 高精度
- BZOJ 1263 SCOI 2006 整数划分 高精度
- BZOJ1263: [SCOI2006]整数划分
- BZOJ1263 [SCOI2006]整数划分