洛谷 P2049 魔術棋子 vector

2022-04-06 23:19:26 字數 915 閱讀 4034

用乙個vector維護每乙個點都可以乘出哪些數來,然後將(n,m)的所有數從小到大輸出即可.

要用乙個bool ff[j][k]來維護當前這個點(i,j)裡面有沒有被放過k,以此保證vector是個集合,不然會mle(壓維也不行)

1 #include2 #include3 #include4 #include5

6using

namespace

std;78

int n,m,k,a[101][101

],ans,now;

9 vector s[2][101

];10

bool vis[101],ff[101][101

];11

12int

main() 26}

27 s[now^1

][j].clear();

28for(int p = 1;p <= s[now][j-1].size(); p++) 34}

35 memset(ff,0,sizeof

(ff));36}

37for(int i = 1;i <= s[now^1][m].size(); i++)

38if(vis[s[now^1][m][i-1] % k] == 0

)39 vis[s[now^1][m][i-1] % k] = 1,ans++;

40 printf("

%d\n

",ans);

41for(int i = 0;i <= k; i++)

42if

(vis[i])

43 printf("

%d "

,i);

44return0;

45 }

洛谷 P2049 魔術棋子

乙個比較簡單dp問題。我們先來分析一下題目,要找到所有的模的總數,首先可以想到,用dp i j 表示在 i,j 這個點所有的方案數。但是,這樣顯然不行。因為僅僅知道方案總數對求解下乙個狀態毫無幫助。那麼,我們就要記錄每乙個點所有可能的模。所以,我們用三維dp i j l 表示在 i,j 點是否能夠得...

洛谷 P2049 魔術棋子

在乙個m n的魔術棋盤中,每個格仔中均有乙個整數,當棋子走進這個格仔中,則此棋子上的數會被乘以此格仔中的數。乙個棋子從左上角走到右下角,只能向右或向下行動,請問此棋子走到右下角後,模 mod k可以為幾?如以下2 3棋盤 3 4 4 5 6 6 棋子初始數為1,開始從左上角進入棋盤,走到右下角,上圖...

洛谷 P2049 魔術棋子

在乙個m n的魔術棋盤中,每個格仔中均有乙個整數,當棋子走進這個格仔中,則此棋子上的數會被乘以此格仔中的數。乙個棋子從左上角走到右下角,只能向右或向下行動,請問此棋子走到右下角後,模 mod k可以為幾?如以下2 3棋盤 3 4 4 5 6 6 棋子初始數為1,開始從左上角進入棋盤,走到右下角,上圖...