社区讨论

#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 条回复,欢迎继续交流。

正在加载回复...