cf C题

题意:矩阵只包含0,1两种数字,给你一个矩阵A,另一个矩阵B,每一次可以从A中选出一个子矩阵,点击一次使得这个子矩阵的四个角的数字变成与原来相反的数,0变1,1变0。问你可不可以经过有限次的变换把矩阵A变成矩阵B。

思路:可以重新定义一个矩阵,矩阵A,B某位置元素相同,则记为0,不同记为1.则现在你的工作就是把这个新矩阵中数字为1的位置变为0.而点击一片大的区域使其四个角的数字变化,等价于直接点击四个角的数字。每个数字为1的数字都当点击一次,因为点击两次相当于没有变。所以要使得所有为1数字都变为0,只需要点击一次,就可。如果把所有数字为1的位置点击一次后,矩阵当中还有不为0的数字则,则这些多出来的1是点击原来的1新生成的,如果在去点击这些为1的数字那么原来从1变为0的数字又会全部变成1.这样就永远也不可能把所有为1的数字变成0了,陷入了一个无限循环的过程中。所以我们只需要检测点击一次过后,矩阵当中还有没有为1的数字,如果有则输出NO,反之输出YES.

下面上代码

#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n,m;
    scanf("%d%d",&n,&m);
    int a[n][m],b[n][m],v[n][m];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&a[i][j]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            scanf("%d",&b[i][j]);
            v[i][j]=((a[i][j]!=b[i][j])?1:0);
        }
    for(int i=0;i<n-1;i++)
        for(int j=0;j<m-1;j++){
        if(v[i][j]){
            v[i][j]=v[i][j]^1;
            v[i+1][j]=v[i+1][j]^1;
            v[i][j+1]=v[i][j+1]^1;
            v[i+1][j+1]=v[i+1][j+1]^1;
        }
    }
    int ok=1;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(v[i][j]==1) ok=0;
    ok?printf("Yes"):printf("No");
    return 0;
}

原文地址:https://www.cnblogs.com/rainyskywx/p/10663592.html

时间: 2024-10-15 16:12:30

cf C题的相关文章

【CF刷题】14-05-12

Round 236 div.1 A:只需要每个点连接所有比他大的点,知道边用完为止. //By BLADEVIL #include <cmath> #include <cstdio> #define maxn 25; using namespace std; int main() { int task; scanf("%d",&task); while (task--) { int n,p; scanf("%d%d",&n,&

一道cf水题再加两道紫薯题的感悟

1. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. 2. 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整除.或者把分子上的每个数进行素数因子分解,分母上的数也进行素数因子分解,若分子上的与分母上相同素数因子进行比较,分子上的素数因子指数大于分母位置上的,则证明可整除. 3. 遇到乘法的时候注意越界问题. 4. 遇到求某一个区间内,满足某一特征的数的个数,而这个特征与因子,约数有关,尝试用埃筛的方法

cf搬题

rand 题基本上是CD吧,AB不想做,E太难了233~ + 看别人代码 - 自己写的 * 看题解的 315D + 给定两个string a b,以及他们出现的次数c,d 求找到一个最大p,使得整个b串为a的子串. 我们对于b的每一位都找到a串的结束的位置nxt数组,然后如果匹配了,把b串的cnt++,最后统计答案,就是根据nxt的跳跃统计cnt就可以了, 254C + 给定两个串,求改变a串最少的顺序,使得a中的每一个字符出现的次数等同于b出现的次数,并输出字典序最小的方案. - naive的

多校+CF简单题

A - The Unsolvable Problem Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger numb

某5道CF水题

1.PolandBall and Hypothesis 题面在这里! 大意就是让你找一个m使得n*m+1是一个合数. 首先对于1和2可以特判,是1输出3,是2输出4. 然后对于其他所有的n,我们都可以非常快的找到一个最小的与它互质的质数p(考虑反证法),并且满足p<n. 这样就相当与解一个同余方程 n*m = p-1 (mod p) , 解出的m可以保证 n*m+1 是 p 的倍数,也就是合数了. 又因为gcd(p,n)==1,所以这个方程肯定有解,直接求一个 n 在mod p意义下的逆元然后乘

CF补题

  过题数/总题数 A B C D E F G H Educational Codeforces Round 64 (Rated for Div. 2) 1/7 AC WA           ** Codeforces Round #556 (Div. 2) 3/5 AC AC AC     ** ** ** Codeforces Round #550 (Div. 3)  3/7 AC AC AC         ** Codeforces Round #547 (Div. 3) 5/8 AC

几道cf水题

题意:给你包含n个元素的数组和k种元素,要求k种元素要用完,并且每种颜色至少用一次,n个元素,如果某几个元素的值相同,这些个元素也不能染成同一种元素. 思路:如果元素个数n小于k或者值相同的元素的个数大于k,那么一定无解,输出-1.用一个num[a[i]]记录每种相同值的元素出现次数,若大于k,无解.这道题的关键在于如何处理值相同的这些元素,可以用一个二维数组f[i][j]来表示状态,其中i表示对应元素值,j代表颜色.只要对于相同的i,j值不同就可以了.每个元素用什么颜色记录在一个数组ans[i

一道cf水题

题意:输入数字n表示字符串中元素个数,字符串中只含有RGB三个字符,现在要求任意两个相同的字符他们的下标之差能整除3. 思路:任意两个相同的字符的下标能整除3,也就是任意三个为一组的字符串当中的字符不能相同,那么只要某一组字符确定了,那么字符串中所有字符也就确定了,我们不妨来枚举前三个字符可能的排列,只要第一组确定了,后面也就全部确定了(当时自己去字符串里面找第一个不重复的三个字符组不就是这个意思么).接下来第一组确定后,由于后面所有的字符都和它相同,所以我们只需要遍历一遍统计后面与他不对应的字

E. Magic Stones CF 思维题

E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Grigory has nn magic stones, conveniently numbered from 11 to nn . The charge of the ii -th stone is equal to cici . Sometime