小z的矩阵

 

传送门:https://www.luogu.org/problemnew/show/P2117

因为矩阵中的每个元素都是0或1,那么a[i][j]*a[j][i] + a[j][i]*a[i][j]只有这样几种情况:0*1+1*0,1*0+0*1,0*0+0*0,1*1+1*1,他们%2后均为0,因此除了从左上到右下的对角线元素外,其余元素对答案的贡献均为0.

统计对角线元素对答案的贡献,再手动举几个例子可知,每次翻转时,原来的贡献也随之翻转。

#include<cstdio>
using namespace std;
inline int read()
{
    static char ch;
    while((ch = getchar()) < '0' || ch > '9');
    int ret = ch - 48;
    while((ch = getchar()) >= '0' && ch <= '9')
        ret = ret * 10 + ch - 48;
    return ret;
 } 
int n,q,a[10000][10000],opt,z,sum;
int main()
{
    n = read();
    q = read();
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            a[i][j] = read();
            if(i == j) sum += a[i][j];
        }
    }
    sum %= 2;
    for(int i = 1;i <= q;i++)
    {
        opt = read();
        if(opt == 3)
        {
            printf("%d",sum);
        } 
        else
        {
            z = read();
            if(sum == 1) sum = 0;
            else sum = 1;
        }
    }
    return 0;
}

 

posted @ 2018-11-05 16:08  我的露娜不会飘  阅读(146)  评论(0编辑  收藏  举报