关于重载运算符的写法
  • 板块学术版
  • 楼主许多
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/9/22 19:58
  • 上次更新2024/9/22 21:56:41
查看原帖
关于重载运算符的写法
230825
许多楼主2024/9/22 19:58

RT

#include<bits/stdc++.h>
#include<cstdio>
#define N 1111
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*f;
}
int n,m;
int v[N][N];
int vis[N][N];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
struct node {
    int i,j;
    int rode;
    // bool operator<(const node &a){
    //     if(rode!=a.rode)return rode<a.rode;
    //     if(i+j!=a.i+a.j)return i+j>a.i+a.j;
    //     return i>a.i;
    // }
};
bool operator<(const node &aa,const node &a){
    if(aa.rode!=a.rode)return aa.rode<a.rode;
    if(aa.i+aa.j!=a.i+a.j)return aa.i+aa.j>a.i+a.j;
    return aa.i>a.i;
}
priority_queue<node>q[20];
int main(){
    n=read();m=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            v[i][j]=read();
            node now;
            now.i=i;now.j=j;
            now.rode=(i==1)+(i==n)+(j==1)+(j==m);
            vis[i][j]=-now.rode;
            q[v[i][j]].push(now);
        }
    for(int i=1;i<=n*m;i++){
        int nowc=read();
        node now=q[nowc].top();q[nowc].pop();
        while(vis[now.i][now.j]>0)now=q[nowc].top(),q[nowc].pop();
        vis[now.i][now.j]=i;
        for(int j=0;j<4;j++){
            node next;next.i=now.i+dx[j];next.j=now.j+dy[j];
            if(next.i<=0||next.i>n||next.j<=0||next.j>m||vis[next.i][next.j]>0)continue;
            vis[next.i][next.j]--;next.rode=-vis[next.i][next.j];
            q[v[next.i][next.j]].push(next);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            printf("%d ",vis[i][j]);
        puts("");
    }
    return 0;
}

为什么我用这个方法就没事换成被注释掉的那种就会CE

求解答

2024/9/22 19:58
加载中...