社区讨论
#17-20 WA,求帮助
P5023[NOIP 2018 提高组] 填数游戏参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo1uhfwn
- 此快照首次捕获于
- 2023/10/23 03:11 2 年前
- 此快照最后确认于
- 2023/11/03 03:43 2 年前
我想用暴力解 P5023 的,但有 4 组数据 WA 了
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
int dp[8][100] = {
{2, 4, 8, 16, 32, 64, 128, 256, 0},
{4, 12, 36, 108, 324, 972, 2916, 8748, 0},
{8, 36, 112, 336, 1008, 3024, 9072, 27216, 0},
{16, 108, 336, 912, 2688, 8064, 24192, 72576, 0},
{32, 324, 1008, 2688, 7136, 21312, 63936, 191808, 0},
{64, 972, 3024, 8064, 21312, 56768, 170112, 510336, 0},
{128, 2916, 9072, 24192, 63936, 170112, 453504, 1360128, 0},
{256, 8748, 27216, 72576, 191808, 510336, 1360128, 3626752, 0}};
int n, m;
const int mod = 1e9 + 7;
int f(int a, int b) {
long long t = 1, y = a;
while (b) {
if (b & 1) t = (t * y) % mod;
y *= y;
y %= mod;
b >>= 1;
}
return (int)(t % mod);
}
signed main() {
scanf("%d%d", &n, &m);
if (m <= 8) {
printf("%d\n", dp[n - 1][m - 1]);
} else {
if (n == 1) {
printf("%d\n", f(2, m));
} else {
int ans = dp[n - 1][7];
for (int i = 8; i <= m - 1; i++) {
ans *= 3;
ans %= mod;
}
printf("%d\n", ans);
}
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...