关注
//// 9 % #include <cstdio> #include <iostream> using namespace std; const long long mod = 1e9 + 7; long long a, b, c, d, n; struct Mat { long long a[4][4]; Mat() { for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++) a[i][j] = 0LL; } void I() { a[0][0] = a[1][1] = a[2][2] = a[3][3] = 1LL; } }; Mat operator*(const Mat& a, const Mat& b) { Mat ret; for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { for(int k = 0; k < 4; k++) { ret.a[i][j] += (a.a[i][k] * b.a[k][j]) % mod; ret.a[i][j] %= mod; } } } return ret; } Mat quick_pow(Mat a, long long b) { Mat ret; ret.I(); while(b > 0) { if (b&1) ret = ret * a; a = a * a; b >>= 1; } return ret; } int main() { Mat M; M.a[0][3] = 1; M.a[1][0] = 1; M.a[1][3] = 1; M.a[2][1] = 1; M.a[2][3] = 0; M.a[3][2] = 1; M.a[3][3] = 1; cin >> a >> b >> c >> d >> n; a %= mod; b %= mod; c %= mod; d %= mod; long long ans = -1; if(n == 1) { ans = a; } else if(n == 2) { ans = b; } else if(n == 3) { ans = c; } else if(n == 4) { ans = d; } else { Mat x; x = quick_pow(M, n-4); ans = 0LL; ans += (a * x.a[0][3]) % mod; ans %= mod; ans += (b * x.a[1][3]) % mod; ans %= mod; ans += (c * x.a[2][3]) % mod; ans %= mod; ans += (d * x.a[3][3]) % mod; ans %= mod; } cout << ans % mod << endl; }
查看原帖
点赞 5
相关推荐
05-28 15:01
Durham University 数据分析师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的实习日记 #
4147827次浏览 33222人参与
# 你投了多少家公司?进展是___ #
252829次浏览 1491人参与
# 第3届现代汽车Code Faster急速编程挑战赛 #
27561次浏览 482人参与
# 秋招投递记录 #
430123次浏览 3320人参与
# 你投递的公司有几家约面了? #
175289次浏览 1048人参与
# 城市生存手册 #
1486次浏览 20人参与
# 今年形式下双非本找得到工作吗 #
340162次浏览 1797人参与
# 重来一次,你会对开始求职的自己说 #
55512次浏览 517人参与
# 秋招提前批,你开始投了吗 #
772821次浏览 8500人参与
# 你认为小厂实习有用吗? #
153541次浏览 810人参与
# 实习返校后,你的精神状态是__? #
47825次浏览 174人参与
# 通信/硬件求职避坑tips #
179855次浏览 1178人参与
# 为了找工作你投递了多少公司? #
122917次浏览 774人参与
# 产品实习,你更倾向大公司or小公司 #
234985次浏览 2169人参与
# 这个工作能去吗 #
184403次浏览 961人参与
# 你开始找寒假实习了吗? #
110453次浏览 633人参与
# 聊聊你的职场新体验 #
364083次浏览 1939人参与
# 我的租房踩坑经历 #
232420次浏览 1343人参与
# 实习生的生存小技巧 #
42259次浏览 366人参与
# 如何看待应届生身份? #
261457次浏览 2364人参与
# 你找工作想离家近 or 离家远? #
55295次浏览 403人参与
