比赛 2026.9.12 评测结果 AAAATTTTTT
题目名称 彩色卡牌 最终得分 40
用户昵称 exil 运行时间 25.188 s
代码语言 C++ 内存使用 8.34 MiB
提交时间 2026-09-12 11:20:24
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int zhi[505][505];
int tu[505][505];
int pan[505][505];
signed main(){
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int r,c,q;
    cin>>r>>c>>q;
    for(int i = 1;i<=r;i++){
        for(int j = 1;j<=c;j++){
            cin>>zhi[i][j];
        }
    }
    for(int i = 1;i<=r;i++){
        for(int j = 1;j<=c;j++){
            cin>>tu[i][j];
        }
    }
    
    for(int i = 1;i<=q;i++){
        int pos;
        cin>>pos;
        if(pos==1){
            int x,y,z;
            cin>>x>>y>>z;
            tu[x][y]=z;
        }
        else{
            int x,y,z;
            cin>>x>>y>>z;
            queue<int>q[2];
            if(zhi[x][y]>z){
                cout<<0<<"\n";
                continue;
            }
            q[0].push(x);
            q[1].push(y);
            set<int>s;
            s.insert(tu[x][y]);
            for(int i = 1;i<=r;i++)for(int j = 1;j<=c;j++)pan[i][j]=0;
            pan[x][y]=1;
            while(!q[0].empty()){
                int nox=q[0].front();
                y=q[1].front();
                q[0].pop();
                q[1].pop();
                if(nox-1>0 && zhi[nox-1][y]<=z && pan[nox-1][y]==0){
                    pan[nox-1][y]=1;
                    s.insert(tu[nox-1][y]);
                    q[0].push(nox-1);
                    q[1].push(y);
                }
                if(nox+1<=r && zhi[nox+1][y]<=z && pan[nox+1][y]==0){
                    pan[nox+1][y]=1;
                    s.insert(tu[nox+1][y]);
                    q[0].push(nox+1);
                    q[1].push(y);
                }
                if(y-1>0 && zhi[nox][y-1]<=z && pan[nox][y-1]==0){
                    pan[nox][y-1]=1;
                    s.insert(tu[nox][y-1]);
                    q[0].push(nox);
                    q[1].push(y-1);
                }
                if(y+1<=c && zhi[nox][y+1]<=z && pan[nox][y+1]==0){
                    pan[nox][y+1]=1;
                    s.insert(tu[nox][y+1]);
                    q[0].push(nox);
                    q[1].push(y+1);
                }
                
            }
            cout<<s.size()<<"\n";
        }
        
        
    }
    return 0;
}