洛谷P5159 WD與矩陣
阿新 • • 發佈:2018-12-31
輸入格式 題解 long 描述 def pac ref code namespace \(998244353\)的結果。
,然後最後值是0的情況是就是\(2^{n-1}\),然後擴展到列上,那麽就是\((2^{n-1})^{m-1}\),然後自己再打打表就發現,顯然這個式子是正確的,然後用快速冪求解,計算的過程中記得取模。
題目背景
WD整日沈浸在矩陣中,無法自拔……
題目描述
WD特別喜歡矩陣,尤其是\(01\)矩陣。
一天,CX給了WD一個巨大的\(n\)行\(m\)列的\(01\)矩陣,WD發現這個矩陣每行、每列的異或值都是\(0\).
CX隨後就問道:“WD,你知道有多少\(01\)矩陣每行每列異或值都是\(0\)嗎!?”WD當然不會這個問題,於是他來請教你。
由於答案可能很大,輸出結果模\(998244353\)的值即可。
輸入輸出格式
輸入格式:
第一行一個數\(T\),表示數據組數。
接下來\(T\)行每行兩個數\(n,m\),分別表示詢問的行數和列數。
輸出格式:
共\(T\)行,每行一個數,表示答案\(mod\)
輸入輸出樣例
輸入樣例#1:
2
2 2
2 2018
輸出樣例#1:
2
851481696
說明
\(subtask1(11pts):~1\le T\le 10,~1\le n,m\le 4\)
\(subtask1(43pts):~1\le T\le 5,~1\le n\le 5,~1\le m\le 1,000\)
\(subtask1(46pts):~1\le T\le 100,000,~1\le n,m\le 10^9\)
思路:
題意是讓你求滿足n行m列且每行每列異或值都是0的矩陣個數,因為是異或,所以只可能有兩個值,\(0\)或\(1\),那麽每行可能的取值就是\(2^n\)
自己整理的題解
下面是我簡潔的代碼:
#include<cstdio> #include<algorithm> #include<cmath> #define ll long long #define mod 998244353 using namespace std; ll n,m; int t; inline ll fpow(ll a, ll b) { if(!b) return 1; ll ans=1; for(;b;b>>=1,a=(a*a)%mod) if(b&1) ans=(ans*a)%mod; return ans; } int main() { scanf("%d",&t); while(t--) { scanf("%lld%lld",&n,&m); printf("%lld\n",fpow(fpow(2,n-1),m-1)); } return 0; }
洛谷P5159 WD與矩陣