NC15172. 情人节的电灯泡
描述
输入描述
第一行两个整数,n(1 <= n <= 1000)和m(1 <= m <= 100000),分别代表正方形格子的边长和询问次数。
接下来n行,每一行有n个bool形数字(0或1),代表灯泡的状态。
接下来m行,每一行第一个数字f(1或2)代表操作的类型,如果f是1,那么接下来输入一个坐标(x, y)(1 <= x, y <= n),对于当前位置的灯泡状态进行改变,如果是2,那么接下来输入两个坐标(x1, y1)(1 <= x1, y1 <= n), (x2, y2)(1 <= x2, y2 <= n),确定子矩阵的位置,输出子矩阵中亮着的灯泡数量并换行。
输出描述
对于每一个2操作,输出子矩阵中亮着的灯泡数量并换行。
示例1
输入:
6 4 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 2 2 2 4 5 1 1 1 2 1 1 6 6 1 2 6
输出:
4 14
C++14(g++5.4) 解法, 执行用时: 417ms, 内存消耗: 5820K, 提交时间: 2020-07-18 21:41:58
#include<iostream> #include<cstring> using namespace std; const int maxn=1005; int a[maxn][maxn]; int main(){ std::ios::sync_with_stdio(false); int n,m,x,y,z,k; while(cin>>n>>m){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; while(m--){ cin>>x; if(x==1){ cin>>y>>z; a[y][z]=a[y][z]==0?1:0; } else{ int ans=0; cin>>x>>y>>z>>k; for(int i=x;i<=z;i++) for(int j=y;j<=k;j++) if(a[i][j]) ans++; cout<<ans<<endl; } } } }
pypy3 解法, 执行用时: 1930ms, 内存消耗: 29848K, 提交时间: 2023-03-06 08:17:19
mp=[] n,m=map(int,input().split()) for _ in range(n): lst=list(map(int,input().split())) mp.append(lst) for _ in range(m): lst=list(map(int,input().split())) if lst[0]==1: mp[lst[1]-1][lst[2]-1]=(mp[lst[1]-1][lst[2]-1]+1)%2 else: ans=0 for i in range(lst[1]-1,lst[3]): for j in range(lst[2]-1,lst[4]): ans+=mp[i][j] print(ans)
C++ 解法, 执行用时: 206ms, 内存消耗: 3956K, 提交时间: 2022-01-16 10:57:10
#include <iostream> using namespace std; int main() { int n,m,v[1001][1001],i,j,f,x,y,c; cin>>n>>m; for(i=1;i<=n;i++)for(j=1;j<=n;j++)cin>>v[i][j]; while(m--){ cin>>f>>i>>j; if(f==1) v[i][j]=!v[i][j]; else { cin>>x>>y; c=0; for(;i<=x;i++)for(f=j;f<=y;f++)c+=v[i][f]; cout<<c<<'\n'; } } }