魔术棋子

题目描述

在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数。一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几?

如以下2*3棋盘:

3 4 4

5 6 6

棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540。所以当K = 5时,可求得最后的结果为:0,2,3。

输入输出格式

输入格式:

输入文件magic.in第一行为三个数,分别为M,N,K (1 ≤ M,N,K ≤ 100)以下M行,每行N个数,分别为此方阵中的数。

输出格式:

输出文件magic.out第一行为可能的结果个数

第二行为所有可能的结果(按升序输出)

输入输出样例

输入样例#1:

Magic.in
2 3 5
3 4 4
5 6 6

输出样例#1:

3
0 2 3

题目大意

一个棋子值为1 从(1,1)-->(m,n) 只能向右或者向下走 每走到一个位置乘上这个位置的数

求到(m,n)时 棋子上的数mod k有多少种可能性

题解

f[i][j][l]=1/0表示在(i,j)mod k=l存不存在这种情况。

预处理 第一行和第一列 向中间递推 (这个地阿妈不是的昂

代码

#include<iostream>
#include<cstdio>
using namespace std;
int m,n,k,ans;
int a[102][102],f[102][102][102];
int main(){
    scanf("%d%d%d",&m,&n,&k);
    for(int i=1;i<=m;i++)
     for(int j=1;j<=n;j++){
         scanf("%d",&a[i][j]);
         a[i][j]%=k;
     }
     f[1][1][a[1][1]]=1;
    for(int i=1;i<=m;i++)
     for(int j=1;j<=n;j++)
       for(int l=0;l<k;l++)
          if(!f[i][j][l*a[i][k]%k])
          f[i][j][l*a[i][j]%k]=f[i-1][j][l]||f[i][j-1][l];
    for(int i=0;i<k;i++)
     if(f[m][n][i])ans++;
    printf("%d\n",ans);
    for(int i=0;i<k;i++)
     if(f[m][n][i])printf("%d ",i);
    return 0;
}
时间: 2024-10-18 07:41:45

魔术棋子的相关文章

洛谷 P2049 魔术棋子

P2049 魔术棋子 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几? 如以下2*3棋盘: 3 4 4 5 6 6 棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540.所以当K = 5时,可求得最后的结果为:0,2,3. 输入输出格式 输入格式: 输入文件magic.in第一行为三个

洛谷——P2049 魔术棋子

P2049 魔术棋子 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几? 如以下2*3棋盘: 3 4 4 5 6 6 棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540.所以当K = 5时,可求得最后的结果为:0,2,3. 输入输出格式 输入格式: 输入文件magic.in第一行为三个

洛谷—— P2049 魔术棋子

https://www.luogu.org/problem/show?pid=2049 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几? 如以下2*3棋盘: 3 4 4 5 6 6 棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540.所以当K = 5时,可求得最后的结果为:0,2,3

【题解】魔术棋子

题目描述 在一个M×N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod)K可以为几? 如以下2×3棋盘: 3 4 4 5 6 6 棋子初始数为1,开始从左上角进入棋盘,走到右下角,上图中,最后棋子上的数可能为288,432或540.所以当K=5时,可求得最后的结果为:0,2,3. 输入输出格式 输入格式 第一行为三个数,分别为M,N,K(1≤M,N,  K≤100):

python中类的魔术方法

目的:学习python中class的magic methods,提高编程效率. 环境:ubuntu 16.4   python 3.5.2 在学习class是一定会接触到它的magic methods,比如常用__init__,形式都是前后有双下划线.除了这个必须的,还有其他有用的方法,下面大概的介绍一下. 运算魔法方法: __add__ 用作 + __sub__ 用作 - __mul__ 用作 * __truediv__用作/ __floordiv__用作// __mod__用作% __pow

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

静态、抽象类、加载类、魔术方法等

静态  static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类 class Ren { public $name="张三"; public static $zhongzu; //静态成员 普通方法 function Say() { echo self::$zhongzu."你好"; } 静态类 static function Run() { ech

PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:

1 <?php 2 /** 3 * PHP获取路径或目录实现 4 * @link http://www.phpddt.com 5 */ 6 7 //魔术变量,获取当前文件的绝对路径 8 echo "__FILE__: ========> ".__FILE__; 9 echo '<br/>'; 10 11 //魔术变量,获取当前脚本的目录 12 echo "__DIR__: ========> ".__DIR__; 13 echo '&l

PHP中的魔术方法总结

最近买了部安卓的手机,google nexus5 系统是安卓4.4.2. 刚到手就发现链接wifi有问题,一直在获取ip(obtaining ip...)和验证.试过恢复出厂 重启 各种都不管用,只有设置静态ip才可以,但是不能一直这样子呀!! 查了下路由器,路由器已经分配了地址.所以最大可能就是安卓手机上拿到这个地址没有成功写入配置文件,为什么没有写入呢,就是权限的问题了,不明白为什么google会出现这个错误. 因为不熟悉安卓系统,所以查了好几天,终于在一个外国网站上发现了下面这个解决办法,