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;
    }
    
  • 相关阅读:
    VellCar(我的钢管车)
    我的留言发送提醒界面
    PHP邮箱验证是否有效
    PHP字符串操作常用函数
    让php永远后台运行
    找到的两个php爬虫,分享一下
    全国DNS服务器IP地址【电信、网通、铁通】
    我的新顶级域名vell001.ml
    PHP使用SwiftMailer发送邮件
    6个WordPress备份插件
  • 原文地址:https://www.cnblogs.com/mollnn/p/14360948.html
Copyright © 2011-2022 走看看