1 条题解
-
0
自动搬运
来自洛谷,原作者为

zhuweiqi
攀峰之高险,岂有崖颠;搏海之明辉,何来彼岸?前进不止,奋斗不息。搬运于
2025-08-24 22:44:41,当前版本为作者最后更新于2023-02-06 08:15:47,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
首先我们一看这个比较奇怪的数据范围,二维数组是肯定开不了的,那么我们就需要用两个一维数组来存储一下每行每列的反转情况了,由于同一行或者同一列被反转了偶数次之后等于没反转,所以我们就用 来表示第 行被反转了,用 来表示第 列被反转了,等 次反转结束之后,我们设当前坐标为 :如果 并且 ,就说明第 行第 列都没有被真正的反转,所以 ;同理,如果 并且 ,就说明第 行第 列都被反转了,那么 就被反转了两次,反转了偶数次之后等于没反转,所以 ;另外,如果第 行和第 列中有且只有一个被反转了,那么 就被反转了一次,所以 ,最终得出结论:如果 ,,我们只需要一个双重循环判断就可以了,上代码!
#include<bits/stdc++.h> using namespace std; int r[5000005],c[5000005]; int main(){ std::ios::sync_with_stdio(0); int n,m,k,ans=0; cin>>n>>m>>k; for(int i=1;i<=k;i++){ char d;int x; cin>>d>>x; if(d=='R') r[x]=!r[x]; else c[x]=!c[x]; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(r[i]!=c[j]) ans++; } } cout<<ans; return 0; }
- 1
信息
- ID
- 8168
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者