Great Cells (數學+思維)
阿新 • • 發佈:2018-12-14
題目:
題目大意:
有一張N*M的格子紙,每個格子可以填1到K之間的數。如果一個格子裡的數嚴格大於本行的其他格子裡的數,並且嚴格大於本列的的其他格子裡的數,則這個格子叫做Great Cell。Ag表示有Ag種填法使得格子紙中恰有g個Great Cell。
思路:
這道題要整體考慮。首先,先把式子拆開,然後就知道了後邊那一項,就是A0+A1+A2+...+Ag,整體考慮,就是所有數的填充情況。
再考慮前邊的那一項,就代表所有great數的方案數。需要自行體會!!!
程式碼:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1000000007; ll qpow(ll a,ll b) { ll sum = 1; while (b) { if (b & 1) { sum=(sum*a)%mod; b--; } b/= 2; a = a*a%mod; } return sum; } int main() { ll n,m,k,i,res,tmp,t1,t2,t3; int cas,t; scanf("%d",&t); for(cas=1;cas<=t;cas++) { scanf("%lld%lld%lld",&n,&m,&k); t1=n*m; res=qpow(k,t1); tmp=0; t2=n+m-2; for(i=1;i<=k-1;i++) { tmp=(tmp%mod+qpow(i,t2)%mod)%mod; } t3=(n-1)*(m-1); tmp=(tmp%mod*qpow(k,t3)%mod*t1%mod)%mod; res=(res+tmp)%mod; printf("Case #%d: %lld\n",cas,res); } }