比赛 2026.9.12 评测结果 AAAATTTTTT
题目名称 彩色卡牌 最终得分 40
用户昵称 Lixj 运行时间 26.035 s
代码语言 C++ 内存使用 5.31 MiB
提交时间 2026-09-12 12:41:37
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int r,q,c;
int dx[5]={-1,1,0,0};
int dy[5]={0,0,-1,1};
int main(){
	freopen("card.in","r",stdin);
	freopen("card.out","w",stdout);
	cin>>r>>c>>q;
	vector<vector<int>> a(r,vector<int>(c));
	for(int i=0;i<r;i++)
		for(int j=0;j<c;j++)
			cin>>a[i][j];
	vector<vector<int>> b(r,vector<int>(c));
	for(int i=0;i<r;i++)
		for(int j=0;j<c;j++)
			cin>>b[i][j];
	while(q--){
		int op,x,y,z;
		cin>>op>>x>>y>>z;
		if(op==1){
			--x;--y;
			b[x][y]=z;
		}
		else{
			--x;--y;
			if(a[x][y]>z){
				cout<<0<<endl;
				continue;
			}
		
			vector<vector<bool>> vis(r,vector<bool>(c,false));
			queue<pair<int,int>> qq;
			qq.push({x,y});
			vis[x][y]=1;
			set<int> color;
			while(!qq.empty()){
				auto [ux,uy]=qq.front();
				qq.pop();
				color.insert(b[ux][uy]);
				for(int d=0;d<4;d++){
					int nx=ux+dx[d],ny=uy+dy[d];
					if(nx>=0&&nx<r&&ny>=0&&ny<c&&!vis[nx][ny]&&a[nx][ny]<=z){
						vis[nx][ny]=1;
						qq.push({nx,ny});
					}
				}
			}
			cout<<color.size()<<endl;
		}
	}
	return 0;
}