题目描述
维护一个 \(01\) 矩阵,初始矩阵全为 \(0\)。
每次操作会将一行或一列反转(\(0\) 变成 \(1\),\(1\) 变成 \(0\))。
输出最后有多少个 \(1\)。
输入格式
第一行 \(M\),表示矩阵行数。
第二行 \(N\),表示矩阵列数。
第三行 \(K\),表示操作个数。
接下来 \(K\) 行,每行一个字符与一个数字。字符为 R
则表示操作某一行,C
表示一列。数字表示哪一行或哪一列。
输出格式
一行一个数字,表示最终 \(1\) 的个数。
样例 #1
样例输入 #1
3
3
2
R 1
C 1
样例输出 #1
4
样例 #2
样例输入 #2
4
5
7
R 3
C 1
C 2
R 2
R 2
C 1
R 4
样例输出 #2
10
提示
样例解释:
011 01000
100 01000
100 10111
10111
\[M\times N\leq 5000000,K\leq 1000000
\]译自 CCC2021 J5/S2。
代码如下
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;//列数
int m;//行数
int k;//操作个数
cin>>m>>n>>k;
int row[m+1];
int col[n+1];
memset(row,0,sizeof row);
memset(col,0,sizeof col);
while(k--){
char t;
int x;
cin>>t>>x;
if(t=='R'){
row[x]=!row[x];
}else{
col[x]=!col[x];
}
}
int t1=0;
for(int i=1;i<=n;i++){
t1+=col[i];
}
int t=0;
for(int i=1;i<=m;i++){
t+=row[i];
}
long long num=t*n+t1*m-2*t*t1;
cout<<num<<endl;
return 0;
}
标签:int,样例,矩阵,一行,P9023,col,row
From: https://www.cnblogs.com/mujianyu/p/17802431.html