Wannafly挑戰賽13 C-zzf的好矩陣

Wannafly挑戰賽13 C-zzf的好矩陣

鏈接:https://www.nowcoder.com/acm/contest/80/C

來源:牛客網

題目描述

一個8 * 8的棋盤,第一個格子放1個麥穗,第二個格子放2個麥穗,第三個格子放4個麥穗……那麼最後,共要放幾個麥穗呢?

zzf表示這個問題實在太簡單,於是重新規定了遊戲的規則。

初始的棋盤爲空,棋盤大小爲p*p,然後他要對棋盤進行若干次操作,可以被選擇的操作如下:

1、選擇一行,每個格子再放一個麥穗

2、選擇一列,每個格子再放一個麥穗

進行若干次操作後,如果得到的棋盤滿足如下性質

1、每個格子都有至少一個麥穗

2、每個格子最多只能有p*p個麥穗

3、任意兩個格子的麥穗數不同

如果滿足以上三條,那麼稱這個棋盤是一個好棋盤,若只是構造一個好棋盤那就太沒意思了,zzf想知道他能得到多少個不同的好矩陣

定義不同的矩陣即只要存在一個位置不同即是不同的

答案對998244353取模

輸入描述:

第一行讀入一個數p,表示這個棋盤的大小

輸出描述:

輸出一行包括一個數,表示好棋盤的個數

示例1

輸入

2

輸出

8

說明

樣例解釋 :
1 2
3 4
3 4
1 2
1 3
2 4
2 4
1 3
2 1
4 3
4 3
2 1
3 1
4 2
4 2
3 1

備註:

2 <= p <= 1e6, 保證p是質數

思路

看題幹,“1、每個格子都有至少一個麥穗;2、每個格子最多只能有p*p個麥穗;3、任意兩個格子的麥穗數不同”。

其實相當於棋盤最終要放的麥穗是一定的(只能是1~p^2)。然後考慮 此矩陣行和列的(全排列p! 和 全排列p!),最後由於是該矩陣是方陣(可逆*2)。

顯然答案爲 2*ans*ans%Mod。

備註中的“保證p是質數”暫時沒想明白有啥搞頭。只粗暴理解爲 p不爲0或1。

AC代碼

#include <iostream>
typedef long long ll;
using namespace std;
const int Mod = 998244353;
int main() {
    int p;
    cin >> p;
    ll ans=1;
    // ans=n!
    for(int i=1; i<=p; i++) {
        ans=ans*i%Mod;
    }
//    if(p==1) {
//        cout << 1 << endl;
//    } else {
        cout << 2*ans*ans%Mod << endl;
//    }
    return 0;
}
發佈了63 篇原創文章 · 獲贊 69 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章