题解:P9298 [POI2020] Tablica binarna

这题有点像二维前缀和(个人认为)。

思路比较简单,修改奇数次的点,不用改,ans1ans-1,修改偶数次,就翻转一次,ans+1ans+1

反转的位置有四个,详见代码:

#include<bits/stdc++.h>
using namespace std;
bool c[1005][1005];
int ans, n, m, q;
void work(int x, int y){
	if(!(x >= 1 && x <= n && y >= 1 && y <= m)) return;
	if(c[x][y]) ans --;
	else ans ++;
	c[x][y] ^= 1;//修改0为1,1为0,这里使用位运算,加速且偷懒
}
int main(){
	cin >> n >> m >> q;
	while(q --){
		int x1, x2, y1, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		work(x1 - 1, y1 - 1);//四个位置
		work(x1 - 1, y2);
		work(x2, y1 - 1);
		work(x2, y2);
		cout << ans << "\n";
	}
	return 0;
}

posted on 2024-06-22 22:06  zhangzirui66  阅读(7)  评论(0)    收藏  举报  来源

导航