比赛 2026.9.12 评测结果 AAAATTTTTT
题目名称 彩色卡牌 最终得分 40
用户昵称 Ruyi 运行时间 25.056 s
代码语言 C++ 内存使用 19.24 MiB
提交时间 2026-09-12 10:20:17
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 501
using namespace std;
ll r,c,q,a[N][N],b[N][N],vis[N][N],op,x,y,z,ans,d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
map<ll,bool> mp;
ll read(){
    ll x=0,f=1;
    char c=' ';
    while(c>'9'||c<'0'){
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=x*10+(c-'0');
        c=getchar();
    }
    return x*f;
}
void write(ll x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return ;
}
void dfs(ll xx,ll yy,ll p){
    if(a[xx][yy]>p) return ;
    vis[xx][yy]=1;
    if(!mp[b[xx][yy]]){
        ans++;
        mp[b[xx][yy]]=true;
    }
    for(int i=0;i<4;i++){
        ll fx=xx+d[i][0],fy=yy+d[i][1];
        if(fx>0&&fx<=r&&fy>0&&fy<=c&&!vis[fx][fy]) dfs(fx,fy,p);
    }
    return ;
}
int main(){
    freopen("card.in","r",stdin);
    freopen("card.out","w",stdout);
    r=read();
    c=read();
    q=read();
    for(int i=1;i<=r;i++)
    for(int j=1;j<=c;j++) a[i][j]=read();
    for(int i=1;i<=r;i++)
    for(int j=1;j<=c;j++) b[i][j]=read();
    while(q--){
        op=read();
        x=read();
        y=read();
        z=read();
        if(op==1) b[x][y]=z;
        else{
            dfs(x,y,z);
            write(ans);
            putchar('\n');
            ans=0;
            mp.clear();
            for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++) vis[i][j]=0;
        }
    }
    return 0;
}