Codeforces Round #498 (Div. 3) F. Xor-Paths(折半搜尋)
阿新 • • 發佈:2018-12-24
Codeforces Round #498 (Div. 3) F. Xor-Paths
emmmm,多校的題目做傻了,昨晚看到這題就矇蔽了,已經菜到連div3 F 都無法識破了......
說白了這就折半搜尋的裸題.
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #include<vector> #include<set> #include<queue> #include<limits.h> #include<string.h> #include<map> #include<list> #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long long LL; #define inf int(0x3f3f3f3f) #define mod ll(1e9+7) #define eps double(1e-7) #define pi acos(-1.0) #define lson root << 1 #define rson root << 1 | 1 int n,m; ll k; ll mi[25][25]; map<ll,ll> mp[25]; ll ans=0; bool check(int i,int j) { if(i<0||j<0||i>=n||j>=m) return false; return true; } void dfs(int i,int j,ll val) { if(!check(i,j)) return ; val^=mi[i][j]; if(i+j==m-1) { mp[i][val]++; return ; } dfs(i+1,j,val); dfs(i,j+1,val); } void dfs1(int i,int j,ll val) { if(!check(i,j)) return ; if(i+j==m-1) { if(mp[i].find(val^k)!=mp[i].end()) { auto it=mp[i].find(val^k); ans+=it->second; } return ; } dfs1(i-1,j,val^mi[i][j]); dfs1(i,j-1,val^mi[i][j]); } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>k; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cin>>mi[i][j]; } for(int i=0;i<25;i++) mp[i].clear(); dfs(0,0,0); dfs1(n-1,m-1,0); cout<<ans<<endl; }