Gift_纪中1763_快速幂+高精加
2016-07-17 11:56
393 查看
Description
无Input
输入的第一行为一个整数t。接下来t行,每行包含九个自然数。
Output
输出t行每行一个整数,表示2^a+2^b+2^c+2^d+2^e+2^f+2^g+2^h+i。
Hint
[数据规模]
40% t<=1000100% t<=100000 a,b,c,d,e,f,g,h<=60 i<=9223372036854775808
解析
看到次方就想到了快速幂,大概算了一下发现最大数据刚好比qword大1,就上了高精加后面发现可以打点……
code
var a,b,c,d,e,f,g,h,t,k,tmp:longint; num1,num2,num3:array[0..500]of longint; st:ansistring; ans,i:qword; function pow(x:longint):qword; var qaq:qword; begin if x=0 then exit(1); if x=1 then exit(2); if x mod 2=0 then begin qaq:=pow(x div 2); exit(qaq*qaq); end else begin qaq:=pow(x div 2); exit(qaq*qaq*2); end; end; begin readln(t); while t>0 do begin readln(a,b,c,d,e,f,g,h,i); ans:=pow(a); ans:=ans+pow(b); ans:=ans+pow(c); ans:=ans+pow(d); ans:=ans+pow(e); ans:=ans+pow(f); ans:=ans+pow(g); ans:=ans+pow(h); fillchar(num1,sizeof(num1),0); fillchar(num2,sizeof(num2),0); fillchar(num3,sizeof(num3),0); str(ans,st); tmp:=0; begin num3[0]:=length(st); for k:=length(st)downto 1 do num1[length(st)-k+1]:=ord(st[k])-48; str(i,st); if length(st)>num3[0] then num3[0]:=length(st); for k:=length(st)downto 1 do num2[length(st)-k+1]:=ord(st[k])-48; for k:=1 to num3[0] do begin num3[k]:=(num2[k]+num1[k]+tmp)mod 10; tmp:=(num2[k]+num1[k]+tmp)div 10; end; if tmp<>0 then begin inc(num3[0]); num3[num3[0]]:=tmp; end; for k:=num3[0]downto 1 do write(num3[k]); writeln; end; dec(t); end; end.
相关文章推荐
- J2EE建议的学习路线
- java的main函数中的args数组传值问题
- Java的内部类详解
- 菜鸟的Linux之路1->egrep及其正则表达式
- 彻底删除mac上的Win10分区
- cf#362-D - Puzzles-树DP /概率
- [转]J2EE学习
- 止损
- LeafChart-实现自己的小型图表库(1)
- sleep(), Sleep()
- CSS中文字大小的pt、px的区别详解
- Eclipse 十个常用快捷键
- pt, px,em,ex,in等这类长度单位(转贴)
- ViewPager部分源码分析二:FragmentManager对Fragment状态的管理完成ViewPager的child添加或移出
- RPC 的概念模型与实现解析
- VGA、DVI、HDMI三种视频信号接口差别
- 自定义PopupWindow
- myeclipse快捷键
- Spring MVC之@RequestBody, @ResponseBody 详解
- Navicat for MySQL使用详解及复杂查询