首页 > 其他分享 >P2049 魔术棋子题解

P2049 魔术棋子题解

时间:2023-08-27 15:55:12浏览次数:41  
标签:int 题解 cin 魔术 ans P2049

思路

设 \(f_{i, j, k}\) 表示从原点走到 \((i, j)\) 模 \(m\) 后的乘积为 \(k\) 的方案数。

状态转移:\(f_{i, j, ka_{i, j} \bmod m} = f_{i - 1, j, k} + f_{i, j - 1, k}\)

统计答案:\(f_{n, n, k}\)。

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 110;

int n, m, o;
int a[N][N];
int f[N][N][N];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

    cin >> n >> m >> o;
    for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> a[i][j];

    f[1][1][a[1][1]] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            for (int k = 0; k < o; k++) {
                // f[i][j - 1]
                // f[i - 1][j]
                f[i][j][(k * a[i][j]) % o] += f[i][j - 1][k];
                f[i][j][(k * a[i][j]) % o] += f[i - 1][j][k];
            }
        }
    }
    vector<int> ans;
    for (int k = 0; k < o; k++) if (f[n][m][k]) ans.push_back(k);
    cout << ans.size() << '\n';
    for (int x : ans) cout << x << ' ';
    cout << '\n';
	return 0;
}

标签:int,题解,cin,魔术,ans,P2049
From: https://www.cnblogs.com/Yuan-Jiawei/p/17660374.html

相关文章

  • CSP-S2020初赛易错题解析
    二.1.4.将第14行的 d[i]<d[j] 改为 d[i]!=d[j],程序输出不会改变。()答案:正确解析:因为双层for会遍历所有情况,所以输出不会改变 2.4.当输入的 d[i]d[i] 是严格单调递减序列时,第17行的 swap 平均执行次数是()A.O(n^2) B.O(n) C.O(nlogn) D.O(logn)正......
  • CSP-J2019初赛易错题解析
    7.把 8 个同样的球放在 5 个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?()提示:如果 8 个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。A.22B.24 C.18 D.20正解:使用枚举法,枚举所有合法情况,共18种 ......
  • P1385 密令题解
    思路我们发现两种操作都不会影响字符之和。考虑动态规划,设\(f_{i,j}\)表示在前\(i\)位,可以达到和为\(j\)的方案数。有\(f_{i,j}=\sum\limits_{k=0}^{25}f_{i-1,j-k}\)。最后记得\(-1\),表示去除原始字符串。代码#include<bits/stdc++.h>#defineintl......
  • CSP-S2019初赛易错题解析
    一.6.由数字 1,1,2,4,8,8 所组成的不同的 4 位数的个数是()A.104  B. 102  C. 98  D. 100错误原因:遗漏答案正解:使用穷举法,第一种ABCD型,共有A(4,4)=24种,第二种AABC型,共有A(4,2)*C(3,2)*2=72种,第三种AABB型,共有6种,总共是102种。 8.G 是一个非连通无向图(......
  • AT_agc030_d [AGC030D] Inversion Sum 题解
    AT_agc030_d[AGC030D]InversionSum题解题目大意给你一个长度为\(n\)的数列,然后给你\(q\)次交换操作,你每次可以选择操作或者不操作,问所有情况下逆序对的总和。(\(n,q\le3000\))分析很容易想到\(dp\),但是发现不好直接算方案。所以我们用一个小技巧,将求方案数转化为求......
  • [ABC317G] Rearranging 题解
    取自我的洛谷博客:https://www.luogu.com.cn/blog/SunnyYuan/solution-at-abc317-g借鉴了官方题解思路。思路首先我们要建立一个二分图。对于输入的\(a_{i,j}\),我们可以连接左侧的\(i\)和右侧的\(a_{i,j}\)。比如样例\(1\):注意:左边的\(1,2,3\)和右边的\(1,2......
  • 「TAOI-2」Ciallo~(∠・ω< )⌒★ 题解
    「TAOI-2」Ciallo~(∠・ω<)⌒★题解不难发现,答案可以分成两种:整段的中间删一点,两端凑一起的考虑分开计算贡献。如果\(s\)中存在子串等于\(t\),那么自然,可以删左边的任何一段,或者右边的任何一段。不妨设子串开始的位置为\(i\),于是其贡献为\((1+2+\cdots+i......
  • YACS 2023年8月月赛 甲组 T2 直线整点 题解
    简单题,先二分出直线上$x$最小的点使得这个点在矩形内。然后不断跳,直到遇到整点。(实际上要用扩欧,但初测能过于是就偷个懒没写) 接着不断跳直到不符合条件。先$\sqrt{V}$个跳一下,跳完后再一个一个跳就不用写二分了多好。代码:#include<iostream>#defineintlonglongusi......
  • UVA908[Re-connecting Computer Sites]题解
    原题1.题意分析题意就是给你很多组数,对于每组数,有三组小数据。第一组小数据先输入一个n表示顶点数,然后再输入n-1条边表示初始边数。其它组小数据先输入一个数k,表示增加的边的数量,然后再输入k条边,表示增加的边。在输入第二组小数据时,要先把边清空,重新输入,但是边的数量不变。2.做......
  • 题解:城市
    题目链接你说得对,但是不如换根。换根是由原先的树形DP简单变换而来,故事发生在这道叫做《城市》的题目中,在这里你妄图求解每个点到树中其它所有节点的距离,即\(f_i=\sum_{j=1}^ndis_{i\toj}\)。可以一次dfs求解出\(f_{root}\),然后我们发现走过一条边\((u,v,w)\)会使......