比赛 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;
}