| 比赛 |
2026.9.12 |
评测结果 |
AAAATTTTTT |
| 题目名称 |
彩色卡牌 |
最终得分 |
40 |
| 用户昵称 |
__0w0__ |
运行时间 |
25.131 s |
| 代码语言 |
C++ |
内存使用 |
6.09 MiB |
| 提交时间 |
2026-09-12 11:55:15 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int r,c,q,mxc;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int col[501][501],sum[501][501],vis[501][501];
set<int>s;
inline int fr(){
int x=0;
char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
void bfs(int sx,int sy,int v,int num){
queue<pair<int,int>>q;
s.clear();
if(num>=sum[sx][sy]){
q.push(make_pair(sx,sy));
s.insert(col[sx][sy]);
vis[sx][sy]=v;
}
while(!q.empty()){
pair<int,int> a=q.front();
q.pop();
for(int i=0;i<4;i++){
int xx=a.first+dx[i];
int yy=a.second+dy[i];
if(xx>0&&xx<=r&&yy>0&&yy<=c&&num>=sum[xx][yy]&&vis[xx][yy]!=v){
s.insert(col[xx][yy]);
vis[xx][yy]=v;
q.push(make_pair(xx,yy));
}
}
}
}
int main(){
freopen("card.in","r",stdin);
freopen("card.out","w",stdout);
cin>>r>>c>>q;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++)sum[i][j]=fr();
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++)col[i][j]=fr();
}
while(q--){
int opt,x,y,a;
scanf("%d%d%d%d",&opt,&x,&y,&a);
if(opt==1)col[x][y]=a;
else{
bfs(x,y,q+78,a);
printf("%d\n",s.size());
}
}
return 0;
}