zoukankan      html  css  js  c++  java
  • 「CodePlus 2017 12 月赛」可做题1-题解

    题目地址

    这个题虽然简单,但是还是有一个非常不错的小技巧,所以还是记录一下。


    • 题意简述

    给你一个n×mn imes m的矩阵,我们定义一个矩阵是巧妙的,满足以下条件:

    任意从其中选择 nn 个不同行不同列的位置,其上的权值之和均相等。

    例如:1 2 34 5 67 8 9egin{vmatrix}1 2 3\ 4 5 6\ 7 8 9end{vmatrix}是巧妙的,因为满足:
    1+5+9=1+6+8=2+4+9=2+6+7=3+5+7=3+4+8=151+5+9=1+6+8=2+4+9=2+6+7=3+5+7=3+4+8=15

    而矩阵1 22 1egin{vmatrix}1 2\ 2 1end{vmatrix}不是巧妙的,因为1+1̸=2+21+1 ot=2+2

    每次询问你给出矩阵中的一个子矩阵是否是巧妙的。

    1n,m500,T105,val1091leq n,mleq 500,Tleq 10^5,valleq10^9


    其实不难发现,对于一个矩阵中的2×22 imes 2的一个子矩阵,例如a bc degin{vmatrix}a b\ c dend{vmatrix},如果a+d̸=c+da+d ot=c+d,那么对于整个矩阵,必定会有一种选法为a+d+{else},c+d+{else}a+d+{else},c+d+{else},那么这个肯定不相等,所以这个矩阵肯定不巧妙。

    所以我们预处理以每个(i,j)(i,j)为右下角的2×22 imes 2的矩阵是否巧妙,是的话v[i][j]=0v[i][j]=0,否则v[i][j]=1v[i][j]=1,然后维护一个vv的二维前缀和,每次询问一个矩阵,就是看这个矩阵里面是否有v[i][j]̸=0v[i][j] ot=0,所以就可以O(nm+T)O(nm+T)的完成这个题了。

    #include<cstdio>
    using namespace std;
    const int N=510;
    char c;
    void read(int &x){
    	x=0;c=getchar();
    	while(c<'0'||c>'9')c=getchar();
    	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c&15),c=getchar();
    }
    int mp[N][N],isok[N][N],n,m,T,x,y,K,now;
    int main(){
    	read(n);read(m);read(T);
    	for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)read(mp[i][j]);
    	for(int i=2;i<=n;++i){
    		for(int j=2;j<=m;++j){
    			isok[i][j]=((mp[i][j]+mp[i-1][j-1])!=(mp[i-1][j]+mp[i][j-1]))
    			+(isok[i-1][j]+isok[i][j-1]-isok[i-1][j-1]);
    		}
    	}
    	while(T--){
    		read(x);read(y);read(K);
    		++x;++y;K-=2;
    		if(~K){
    			now=isok[x+K][y+K]-isok[x-1][y+K]-isok[x+K][y-1]+isok[x-1][y-1];
    			if(!now)puts("Y");
    			else puts("N");
    		}else puts("Y");
    	}
    	return 0;
    }
    
  • 相关阅读:
    如何规避javascript多人开发函数重名问题
    用纯css创建一个三角形
    什么是语义化的HTML
    什么是AJAX?AJAX的原理
    call()和apply()的认知
    经常遇到的浏览器的兼容性有哪些?原因?解决方法是什么?
    为什么要清除浮动,有哪些方式
    常用浏览器的内核分别是什么
    【托业】【怪兽】TEST02
    【托业】【怪兽】TEST04
  • 原文地址:https://www.cnblogs.com/VictoryCzt/p/10053391.html
Copyright © 2011-2022 走看看