zoukankan      html  css  js  c++  java
  • 牛客提高D3t1 破碎的矩阵

    分析

    我们发现如果行的异或和等于列的异或和那么对于n-1行m-1列的所有数的选择都是任意的

    因为一定可以在它的行末/列末选一个合适的数是的整体满足

    但是我们发现对于右下角那一个数是否满足存疑

    我们设矩阵为

    a1  a2  a3  a4

    a5  a6  a7  a8

    a9  a10 a11 a12

    a13 a14 a15 a16

    设行和列的异或值分别为X1 X2 X3 X4 Y1 Y2 Y3 Y4

    设左上角3*3的矩阵的异或值为ALL

    则:

    a16 = X4 ^ (Y1 ^ Y2 ^ Y3 ^ ALL)

        =X4 ^ (X1 ^ X2 ^ X3 ^ X4 ^ Y4 ^ ALL)

        = Y4 ^ (X1 ^ X2 ^ X3 ^ ALL)

    得证

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    #define int long long
    int n,m,mod;
    inline int pw(int x,int p){
        int res=1;
        while(p){
          if(p&1)res=res*x%mod;
          x=x*x%mod;
          p>>=1;
        }
        return res;
    }
    signed main(){
        int i,j,k,t,v;
        scanf("%lld",&t);
        while(t--){
          scanf("%lld%lld%lld%lld",&n,&m,&k,&mod);
          int ans=0,x=0,y=0;
          for(i=1;i<=n;i++){
            scanf("%lld",&v);
            x^=v;
          }
          for(i=1;i<=m;i++){
            scanf("%lld",&v);
            y^=v;
          }
          if(x!=y)puts("0");
            else {
              k++;
              k%=mod;
              printf("%lld
    ",pw(pw(k,n-1),m-1));
            }
        }
        return 0;
    }
  • 相关阅读:
    mysql 写计数器需要注意的问题
    CSS3倒影效果
    svg path 解析
    图论-深度优先和广度优先(均非递归)
    线段树---HDU1166敌兵布阵
    线段树入门---给定多个线段求点的出现个数
    NYOJ-129 并查集
    并查集(基础)
    二叉搜索树
    堆及堆排序
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11405743.html
Copyright © 2011-2022 走看看