codevs1009
2016-03-05 17:06
323 查看
题目地址:http://codevs.cn/problem/1009/
分析:
【TAG】FLOYD,乘法原理,高精度
【构思】
求可变换数的个数,那么就是组合数学的内容,四个原理的应用;
假如能知道每位的变换个数。那么乘起来就是结果。
于是用FLOYD来求传递闭包。每一个数能够变换成其它哪些数,然后累加;
最后相乘,注意要高精度;
【小结】
1、求个数:组合数学。最本质的求法事实上就是加法原理、减法原理、乘法原理和除法原理
2、对于超长的数字。当做字符串处理
3、求连通个数的问题,用Floyd求出传递闭包后解决
代码:
分析:
【TAG】FLOYD,乘法原理,高精度
【构思】
求可变换数的个数,那么就是组合数学的内容,四个原理的应用;
假如能知道每位的变换个数。那么乘起来就是结果。
于是用FLOYD来求传递闭包。每一个数能够变换成其它哪些数,然后累加;
最后相乘,注意要高精度;
【小结】
1、求个数:组合数学。最本质的求法事实上就是加法原理、减法原理、乘法原理和除法原理
2、对于超长的数字。当做字符串处理
3、求连通个数的问题,用Floyd求出传递闭包后解决
代码:
var a,ans:array[1..30] of longint; f:array[0..9] of longint; g:array[0..9,0..9] of boolean; m,n,i,j,t,k:longint; s:string; begin fillchar(g,sizeof(g),false); fillchar(f,sizeof(f),0); fillchar(ans,sizeof(ans),0); readln(s); n:=0; m:=0; i:=1; while s[i] in ['0'..'9'] do begin inc(n); a :=ord(s[i])-48; inc(i); end; while i<=length(s) do begin if s[i] in ['0'..'9'] then m:=m*10+ord(s[i])-48; inc(i); end; for i:=1 to m do begin readln(t,j); g[t,j]:=true; end; for k:=0 to 9 do for i:=0 to 9 do for j:=0 to 9 do g[i,j]:=g[i,j] or (g[i,k] and g[k,j]); for i:=0 to 9 do g[i,i]:=true; for i:=0 to 9 do for j:=0 to 9 do inc(f[i],ord(g[i,j])); ans[1]:=1; for k:=1 to n do begin j:=0; for i:=1 to 30 do begin ans[i]:=ans[i]*f[a[k]]+j; j:=ans[i] div 10; ans[i]:=ans[i] mod 10; end; end; j:=30; while ans[j]= 0 do dec(j); for i:=j downto 1 do write(ans[i]); writeln; end.
相关文章推荐
- nginx配置文件
- SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-003- 上传文件multipart,配置StandardServletMultipartResolver、CommonsMultipartResolver
- IOS开发中的几种设计模式
- String s = "123"; 到底创建了几个对象
- 由先序序列和中序序列构建二叉树
- process令牌
- VB.net版机房收费-“未能添加对‘Factory’的引用”
- python基础0305
- BZOJ 1007: [HNOI2008]水平可见直线 平面直线
- 《HBase上的交互式SQL查询》Intel 孙元浩
- zzuli蓝桥 text1 G 搬砖
- SQL读书笔记(八) 联结表
- 第一次作业
- 2016年3月5日 进制转换(二进制、八进制、十进制、十六进制)
- Asp.Net页面传值的几种方式
- Poj2746-Housewife Wind 树链剖分入门(边权)
- 机房重构—存储过程
- Linux之解析鼠标input事件数据(有BUG,已经解决)
- 适用于 php-5.2 的 php.ini 中文版
- 如何学习