题目:P9298 [POI2020] Tablica binarna
题目
给一个矩阵,每一个元素的值只能为 1 1 1 或者 0 0 0,初始化为 0 0 0。每次操作给定两个端点,把这两个端点围成矩阵之内的每个元素翻转。求在每次对矩阵执行修改操作后,需要执行至少多少次简单的修改操作,才能令矩阵内所有元素的值全部改为 0 0 0。
思路
经过思考之后,发现:
这四个值有偶数个翻转的时候答案不变,有奇数个翻转的位置每次操作只有 4 4 4 个,所以:
暴力!!!
上代码(码风奇特,勿喷)
#include <bits/stdc++.h> //万能头
using namespace std; //命名空间
int n , m , ans , a[1001][1001]; //一堆变量和数组,数组自动清0
void run(int x , int y) //函数
{
if(x < 1 || y < 1 || x > n || y > m) //特判如果出界
{
return ; //直接return
}
ans -= a[x][y];
a[x][y] ^= 1; //按位异或^应该都懂吧
ans += a[x][y];
}
int main() //主函数
{
int t , x , y , p , q; //变量不多解释
cin >> n >> m >> t; //输入
for(int i = 1; i <= t; i++) //循环t次操作
{
cin >> x >> y >> p >> q; //输入
run(x - 1 , y - 1); //四个全都run一遍
run(p , q);
run(x - 1 , q);
run(p , y - 1);
cout << ans << endl; //输出
}
return 0; //完美结束Perfect
}
温馨提示:
题目千万条,诚信第一条,代码不规范,棕名两行泪。
别抄了昂,就这题你也抄?看看思路行了昂。