ACM-ICPC 2018 徐州赛区网络预赛 Morgana Net
生活随笔
收集整理的這篇文章主要介紹了
ACM-ICPC 2018 徐州赛区网络预赛 Morgana Net
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:Morgana Net
題解:把a矩陣每一位根據公式推出遞推矩陣,然后用矩陣快速冪,比賽沒想到啊,,
#include<bits/stdc++.h> #define ll long long using namespace std; const int mod=2; struct mat {int n, m;ll a[70][70];mat() {}void init(int _n, int _m){n = _n;m = _m;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++) a[i][j] = 0;}}mat operator + (const mat &B)const{mat C;C.init(n,m);for(int i=0; i<n; i++)for(int j=0; j<m; j++)C.a[i][j]=(a[i][j]+B.a[i][j])%mod;return C;}mat operator*(const mat &P)const{mat ret;ret.init(n,m);for(int i = 0; i < n; i++){for(int k = 0; k < m; k++){if(a[i][k]){for(int j = 0; j < P.m; j++){ret.a[i][j] = (a[i][k] * P.a[k][j] + ret.a[i][j])%mod ;}}}}return ret;}mat operator^(const ll &P)const{ll num = P;mat ret, tmp = *this;ret.init(n,m);for(int i = 0; i < n; i++) ret.a[i][i] = 1;while(num){if(num & 1) ret = ret * tmp;tmp = tmp * tmp;num >>= 1;}return ret;}void view(){for(int i=0;i<n;i++){for(int j=0;j<m;j++){printf("%lld ",a[i][j]);}printf("\n");}} }ap,ad; int a[10][10],b[50][50],n,m,t; int get(int x,int y) {return x*n+y; } int main() {int T;scanf("%d",&T);while(T--){scanf("%d %d %d",&n,&m,&t);ap.init(1,n*n);for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%d",&a[i][j]);ap.a[0][get(i,j)]=a[i][j];}}for(int i=0;i<m;i++){for(int j=0;j<m;j++){scanf("%d",&b[i][j]);b[i][j]%=2;}}ad.init(n*n,n*n);int mm=(m-1)/2;for(int i=0;i<n;i++){for(int j=0;j<n;j++){for(int p=i-mm;p<=i+mm;p++){for(int q=j-mm;q<=j+mm;q++){//cout<<"SSS"<<p-i+mm+1<<" "<<q-j+mm+1<<endl;if(p>=0&&p<n&&q>=0&&q<n&&b[p-i+mm][q-j+mm]){ad.a[get(p,q)][get(i,j)]=1;}}}}}// ad.view();ap=ap*(ad^(t));int ans=0;for(int i=0;i<n*n;i++){ans+=ap.a[0][i];}printf("%d\n",ans);} }?
轉載于:https://www.cnblogs.com/lhclqslove/p/9715925.html
總結
以上是生活随笔為你收集整理的ACM-ICPC 2018 徐州赛区网络预赛 Morgana Net的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Power BI新主页将使内容的导航和发
- 下一篇: 必做作业2:目前比较火的直播软件调研