思路:打表.wa在了16.当我发现BUG改掉的时候,又wa了. vp结束了,一看代码.卧操~check把1放在外面了.崩溃
1. 看到1e18 能打表打表
2. 规律题总是看不出规律. MDZZ
#include<bits/stdc++.h> #define PI acos(-1.0) using namespace std; typedef long long ll; const int N=1e5+5; const int MOD=1e9+7; const int INF=0x3f3f3f3f; char s[200]; int n,m,k,ans; int a[50][50]; bool check(){ // for(int i=1;i<=n;i++){ // for(int j=1;j<=m;j++) printf("%d ",a[i][j]); // puts(""); // } // printf("***********"); ll t; for(int i=1;i<=n;i++){ t=1; for(int j=1;j<=m;j++) t*=a[i][j]; if(t!=k) return false; } for(int j=1;j<=m;j++){ t=1; for(int i=1;i<=n;i++) t*=a[i][j]; if(t!=k) return false; } // printf("GOOD\n"); return true; } void dfs(int x,int y){ if(x==n&&y==m){ a[x][y]=1; if(check()) ans++; a[x][y]=-1; if(check()) ans++; // puts("!**********"); return ; } for(int t=1;t<=2;t++){ if(t==1){ a[x][y]=1; int xx=x,yy=y; if(m==yy) yy=1,xx++; else yy++; dfs(xx,yy); } else{ a[x][y]=-1; int xx=x,yy=y; if(m==yy) yy=1,xx++; else yy++; dfs(xx,yy); } } } int main(void){ for(n=1;n<=5;n++){ for(m=1;m<=5;m++){ ans=0; k=-1; dfs(1,1); printf("%d %d %d\n",n,m,ans); } } return 0; } /********* *********/
#include<bits/stdc++.h> #define PI acos(-1.0) using namespace std; typedef long long ll; const int N=1e5+5; const ll MOD=1e9+7; const int INF=0x3f3f3f3f; ll qm(ll a,ll b){ ll t=1; while(b){ if(b&(1ll)) t=(t%MOD*a%MOD)%MOD; a=(a%MOD*a%MOD)%MOD; b>>=1ll; } return t%MOD; } int main(void){ ll n,m,k; cin >>n>>m>>k; // if(n==1 || m==1){ // cout << 1 << endl; // return 0; // } if(n%2==1 && m%2==0 && k==-1){ cout <<0;return 0; } if(n%2==0 && m%2==1 && k==-1){ cout <<0;return 0; } ll ans=qm(2,n-1)%MOD; ans=qm(ans,m-1)%MOD; cout << ans%MOD <<endl; return 0; } /********* *********/