HDU-2017 多校训练赛2-1006-Funny Function
2017-07-30 19:43
162 查看
ACM模版
刚拿到这个题时,我认为这个题是类似于斐波那契数列的矩阵求解那样,但是我矩阵好菜的,不会构造单位矩阵,故卒。后来发现这个题除了这种思路,还能找到一个规律,最后变成一个公式。前者方案是官方题解的解法,后者就是比较容易写的解法了……当然问题的关键是是否能找到规律,如果尝试打表一下,也许真的能够找到……
对了,先贴一下官方题解吧,给大家参考一下:
最后,给出一下最终公式:
ans=⎧⎩⎨⎪⎪2(2n−1)m−13,2(2n−1)m−1+13,n & 1 == 0n & 1 == 1
第一个解法代码稍微长一些,第二个就简单多了……
描述
题解
哎,这个题比赛时要是大胆的打表试试也许可以发现一些规律……看到数学公式推导题我就犯怵……这样子不好╮(╯﹏╰)╭不好。刚拿到这个题时,我认为这个题是类似于斐波那契数列的矩阵求解那样,但是我矩阵好菜的,不会构造单位矩阵,故卒。后来发现这个题除了这种思路,还能找到一个规律,最后变成一个公式。前者方案是官方题解的解法,后者就是比较容易写的解法了……当然问题的关键是是否能找到规律,如果尝试打表一下,也许真的能够找到……
对了,先贴一下官方题解吧,给大家参考一下:
最后,给出一下最终公式:
ans=⎧⎩⎨⎪⎪2(2n−1)m−13,2(2n−1)m−1+13,n & 1 == 0n & 1 == 1
第一个解法代码稍微长一些,第二个就简单多了……
代码
#include <cstdio> using namespace std; typedef long long ll; const ll MOD = 1e9 + 7; ll QPow(ll x, ll n) { ll ret = 1; for (; n; n >>= 1) { if (n & 1) { ret = ret * x % MOD; } x = x * x % MOD; } return ret; } ll inv(ll x) { return QPow(x, MOD - 2); } ll n,m; ll ans; int main() { int T; scanf("%d", &T); while (T--) { scanf("%lld%lld", &n, &m); if (n & 1) { ans = (QPow(QPow(2, n) - 1, m - 1) * 2 % MOD + 1) * inv(3) % MOD; } else { ans = QPow(QPow(2, n) - 1, m - 1) * 2 % MOD * inv(3) % MOD; } printf("%lld\n", ans); } return 0; }
相关文章推荐
- HDU-2017 多校训练赛5-1006-Rikka with Graph
- HDU 6038 (2017 多校训练赛1 1006) Function(图论)
- HDU-2017 多校训练赛9-1006-Senior Pan
- HDU-2017 多校训练赛1-1006-Function
- HDU-2017 多校训练赛8-1006-Fleet of the Eternal Throne
- HDU 6043 (2017 多校训练赛1 1002) Balala Power!
- HDU-2017 多校训练赛9-1008-Numbers
- HDU 6055 (2017 多校训练赛2 1011)Regular polygon
- hdu 6050: Funny Function (2017 多校第二场 1006) 【找规律】
- HDU-2017 多校训练赛2-1001-Is Derek lying?
- HDU-2017 多校训练赛3-1008-RXD and math
- HDU 2017 多校联合训练赛6 1008 6103 Kirinriki 优美的暴力
- HDU 2017 多校联合训练赛7 1008 6127 Hard challenge (重载运算符)
- HDU-2017 多校训练赛4-补题
- HDU-2017 多校训练赛1-补题
- HDU 2017 多校联合训练赛1 1002 6034 Balala Power 排序
- HDU-2017 多校训练赛4-1007-Matching In Multiplication
- HDU 2017 多校联合训练赛2 1011 6055 Regular polygon map&pair
- 2017 多校训练第二场 HDU 6050 Funny Function
- HDU-2017 多校训练赛7-1008-Hard challenge