求调
  • 板块灌水区
  • 楼主nini0913
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/2 10:59
  • 上次更新2024/10/2 11:27:01
查看原帖
求调
1062571
nini0913楼主2024/10/2 10:59

题目描述

AC鸭有一个神奇的密码锁,这个密码锁由 n 个红色按钮,m 个蓝色按钮,以及一个 n∗m 大小的显示屏。显示屏中的每个位置可以显示 0/1,初始为 0.

设置密码时,按下第 i 个红色按钮,显示屏上的第 i 行中的所有数字都会切换一次状态( 0 变成 1,1 变成 0 ),按下第 j 个蓝色按钮,第 j 列的所有数字会切换一次状态.

给出AC鸭对按钮的 k 次操作,求最终密码锁显示屏上的所有数字之和。

输入格式

第一行输入三个整数 n,m,k,表示显示屏的大小与操作数。

接下来给出 k 个操作,每个操作输入一行,为一个字符串 s 和一个整数 x,s 为 red 代表按下第 x 个红色按钮,为 blue 代表按下第 x 个蓝色按钮。

输出格式

输入一个 n∗m 的矩阵,其中只包含 0 或 1,表示最后显示屏上的数字之和。

样例

输入数据 1

3 4 5
blue 3
red 2
red 1
blue 2
blue 3

输出数据 1

7

数据范围

1<=n,m,k<=300000

我的代码

#include<iostream>
#include<vector>
using namespace std;
int n,m,k;
vector<int>a[300001];
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		a[i].resize(3010,0);
	while(k--){
		int x;
		string op;
		cin>>op;
		if(op=="blue"){
			cin>>x;
			for(int i=1;i<=n;i++)
				if(a[i][x]==1)a[i][x]=0;
				else a[i][x]=1;
		}
		else{
			cin>>x;
			for(int i=1;i<=m;i++)
				if(a[x][i]==1)a[x][i]=0;
				else a[x][i]=1;
		}
	}
	int res=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j])res++;
	cout<<res<<endl;
	return 0;
}

谢谢各位大佬!!

2024/10/2 10:59
加载中...