zoukankan      html  css  js  c++  java
  • [CF1006F] Xor-Paths

    [CF1006F] Xor-Paths

    Description

    给出一个 n × m 的网格,每个格子上有权值 (a[i][j]),要从 (1,1) 走到 (n,m),每次只能向右或向下走,沿路计算异或和,求异或和等于 k 的路径数。

    Solution

    双向 BFS,由于要走的总步数为 (steps=n+m-2),正着走 (steps/2),反着走 ((steps+1)/2),然后合起来用 map 算答案即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 105;
    
    int a[N][N], n, m, k;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin >> n >> m >> k;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                cin >> a[i][j];
            }
        }
    
        int steps = n + m + 2;
    
        map<pair<int, int>, int> mp;
        vector<pair<int, int>> vec;
    
        queue<tuple<int, int, int>> que;
        que.push({1, 1, a[1][1]});
        while (que.size())
        {
            auto [i, j, val] = que.front();
            que.pop();
            if (i + j == steps / 2)
            {
                mp[{i, val}]++;
            }
            else
            {
                if (i < n)
                    que.push({i + 1, j, val ^ a[i + 1][j]});
                if (j < m)
                    que.push({i, j + 1, val ^ a[i][j + 1]});
            }
        }
    
        que.push({n, m, a[n][m]});
        while (que.size())
        {
            auto [i, j, val] = que.front();
            que.pop();
            if (i + j == steps / 2)
            {
                vec.push_back({i, val ^ a[i][j]});
            }
            else
            {
                if (i > 1)
                    que.push({i - 1, j, val ^ a[i - 1][j]});
                if (j > 1)
                    que.push({i, j - 1, val ^ a[i][j - 1]});
            }
        }
    
        int ans = 0;
    
        for (auto [i, val] : vec)
        {
            ans += mp[{i, val ^ k}];
        }
    
        cout << ans << endl;
    }
    
  • 相关阅读:
    Maven的使用--Eclipse在线安装Maven插件m2e
    Maven的使用--安装
    oracle 函数
    oracle dblink使用
    【JVM】应用CPU冲高问题
    【Git】git操作(转)
    【java】判断两个对象是否相等
    【JDK】JDK自带工具应用——堆分析
    【script】Github上的工具脚本useful-scripts
    【JWT】JWT实现用户认证(转)
  • 原文地址:https://www.cnblogs.com/mollnn/p/14360948.html
Copyright © 2011-2022 走看看