2016计蒜之道-初赛-第四场-B-遗失的支付宝密码
2016-06-11 17:11
295 查看
描述
某用户忘记了支付宝的登录密码,他只记得自己的密码满足以下几个条件:密码中最多有 m 种不同的字符;
密码的最大长度为 n,但不能为空;
密码的任意一个前缀都 不是 一个 square。>>>详情请点击
题解
一道找规律的问题,逐位考虑情况。如第二组测试数据:4,5。一共四位,先来考虑一位的,有5种情况;再来考虑两位的,因为需要避免square的出现,所以需要第二位和第一位不同,那么就有5 x 5 - 5 = 20种情况;接着考虑三位,第三位因为是基于前两位来填数字,所以无论填几都是满足的,所以是20 x 5 = 100种情况;四位的情况是再在三位的情况下填一位,因为要避免第三和第四位的组合和前两位的组合相同,所以是需要减去前两位存在的组合情况,也就是说是100 x 5 - 20 = 480种情况。加在一起也就是605种情况,大概就是这个样子。
大数据范围的情况暂时没有什么好的思路解决,2^32次方是0xffffffff+1,怎么取模是个问题,需要思考思考。
代码C++
#include <iostream> typedef long long LL; LL MOD = 4294967296; LL n, m; LL A[101]; int main(int argc, const char * argv[]) { while (std::cin >> n >> m) { A[0] = 1; for (int i = 1; i <= n; i++) { if (i % 2) { A[i] = A[i - 1] * m; } else { A[i] = A[i - 1] * m - A[i / 2]; } } LL ans = 0; for (int i = 1; i <= n; i++) { ans = (ans + A[i]) % MOD; } std::cout << ans << std::endl; } return 0; }
相关文章推荐
- 浅谈javascript 迭代方法
- php可应用于面包屑导航的迭代寻找家谱树实现方法
- PHP5.5迭代生成器用法实例详解
- JavaScript数组迭代器实例分析
- 举例讲解如何在Python编程中进行迭代和遍历
- JS的数组迭代方法
- 深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
- javaScript数组迭代方法详解
- java迭代子模式详解
- 详解Java中的迭代迭代器Iterator与枚举器Enumeration
- 跟老齐学Python之让人欢喜让人忧的迭代
- python使用三角迭代计算圆周率PI的方法
- 详解Python迭代和迭代器
- Python迭代用法实例教程
- 详解Python迭代和迭代器
- PHP5.5迭代生成器用法实例详解
- javaScript数组迭代方法详解
- Python 2.5.2 迭代
- 图、例详解DNS递归和迭代查询原理及过程
- PHP SPL,被遗落的宝石