比赛 2026.9.12 评测结果 AAAATTTTTT
题目名称 彩色卡牌 最终得分 40
用户昵称 杨蕙宇 运行时间 25.140 s
代码语言 C++ 内存使用 19.94 MiB
提交时间 2026-09-12 11:23:05
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=510;
const int M=250010;
int r,b,v[N][N],c[N][N];
int q;
int mk[N][N];
int cnt[M];
set<int>st;
int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void solve(int x,int y,int z){
    if(mk[x][y])return;
    if(z>=v[x][y]){
        mk[x][y]=1;
        st.insert(c[x][y]);
//        cout<<x<<" "<<y<<" "<<z<<" "<<v[x][y]<<" "<<c[x][y]<<" "<<st.size()<<"\n";
        for(int i=0;i<4;i++){
            int xx=x+xy[i][0],yy=y+xy[i][1];
//            cout<<"j:"<<x<<" "<<y<<" "<<xx<<" "<<yy<<"\n";
            if(xx<1||xx>r||yy<1||yy>b)continue;
            if(mk[xx][yy])continue;
            
            solve(xx,yy,z);
        }
    }
    else return;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    cin>>r>>b>>q;
    for(int i=1;i<=r;i++)for(int j=1;j<=b;j++)cin>>v[i][j];
    for(int i=1;i<=r;i++)for(int j=1;j<=b;j++)cin>>c[i][j];
    while(q--){
        int op,x,y,z;
        cin>>op>>x>>y>>z;
        if(op==1){
            c[x][y]=z;
        } 
        else{
            for(int i=1;i<=r;i++)for(int j=1;j<=b;j++)mk[i][j]=0;
            st.clear();
            solve(x,y,z);
            cout<<st.size()<<"\n";
        }
    }
    return 0;
}