栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3690 Choosing number

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3690 Choosing number

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <map>#include <queue>#include <set>#include <stack>#include <cmath>#include <ctime>using namespace std;typedef long long LL;const LL MOD = 1000000007;struct Mat {LL val[2][2];void init(LL v = 0) {for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) val[i][j] = 0;val[i][i] = v;}}void print() {for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) cout << val[i][j] << ' ';cout << endl;}}} base, op;Mat operator * (Mat a, Mat b) {Mat ret;ret.init();for (int i = 0; i < 2; i++) {for (int k = 0; k < 2; k++) {if (a.val[i][k]) {for (int j = 0; j < 2; j++) ret.val[i][j] += a.val[i][k] * b.val[k][j] % MOD, ret.val[i][j] %= MOD;}}}return ret;}Mat operator ^ (Mat a, int p) {Mat ret;ret.init(1);while (p > 0) {if (p & 1) ret = ret * a;a = a * a, p >>= 1;}return ret;}void cal(LL n, LL m, LL k) {LL dp[10][2];k = m - k;dp[1][0] = k, dp[1][1] = m - k;for (int i = 2; i <= n; i++) {dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) * k;dp[i][1] = dp[i - 1][0] * (m - k) + dp[i - 1][1] * (m - k - 1);}for (int i = 0; i < 2; i++) cout << dp[n][i] << endl;cout << dp[n][0] + dp[n][1] << endl;}int main() {LL n, m, k;while (cin >> n >> m >> k) {k = m - k;op.val[0][0] = op.val[1][0] = k;op.val[0][1] = m - k, op.val[1][1] = m - k - 1;base.init();base.val[0][0] = k, base.val[0][1] = m - k;base = base * (op ^ (n - 1));cout << (base.val[0][0] + base.val[0][1]) % MOD << endl;}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号