zoukankan      html  css  js  c++  java
  • P2117 小Z的矩阵

    题意:

    给你一个初始01矩阵

    三种操作

    1、给一个x,把第x行01互换

    2、给一个x,把第x列01互换

    3、求$(sum_{i=1}^nsum_{j=1}^nf[i][j]*f[j][i])%2$

    $nle 10^3,qle 5*10^5$

    暴力是$O(n^2q)$的,很明显过不了

    那么应该怎么做呢

    不难看出$f[i][j]$在$i e j$的时候被算了两次!!!

    如果f[i][j]*f[j][i]=1,那么就是(1+1)%2=2%2=0

    如果f[i][j]*f[j][i]=0,那么就是(0+0)%2=0%2=0

    卧槽,根本对答案无贡献啊

    所以只用考虑对角线就行了

    $O(q)$

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    int n;
    int q;
    int ju[1050][1050];
    int dui;
    int ans;
    int main()
    {
        n=read();
        q=read();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                ju[i][j]=read();
                if(i==j) ans+=ju[i][j];
            }
        ans%=2;
        for(int x,flag,i=1;i<=q;i++)
        {
            flag=read();
            if(flag==1||flag==2)
            {
                x=read();
                if(ju[x][x]) ans--;
                else ans++;
                ans=(ans+2)%2;
            }
            if(flag==3)
            {
                ans%=2;
                put(ans);
            }
        }
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    OO设计精要:封装,还是封装(有感于“Why getter and setter methods are evil ”by Allen Holub )
    博客园建议:能否记住在博客园的首页上只显示标题
    戴尔国际英语
    C#代码契约(转)
    C#数组传递和返回
    SecureString
    里氏替换原则
    ASP.NET的Cache(转)
    WCF服务
    C#枚举中的位运算权限分配
  • 原文地址:https://www.cnblogs.com/olinr/p/9583495.html
Copyright © 2011-2022 走看看