站外题求调
  • 板块学术版
  • 楼主Han24666
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/3 17:45
  • 上次更新2024/10/3 19:41:09
查看原帖
站外题求调
1025652
Han24666楼主2024/10/3 17:45

这道站外题90分求调

感谢帮助我的好人 好人一生平安

这道题要加freopen

#include<bits/stdc++.h>
using namespace std;
int read(){
	char ch=getchar();
	int sum=0,k=1;
	while(ch<'0'||ch>'9'){
		if(ch=='-')k=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		sum=sum*10+(ch-'0');
		ch=getchar();
	}
	return sum*k;
}
void print(int n){
	if(n<0){
		putchar('-');
		n=-n;
	}
	if(n<=9)putchar(n+'0');
	else{
		print(n/10);
		putchar(n%10+'0');
	}
}
int n,m;
int a[1005][1005];
int b[1005][1005];
int c[10005];
int ans=0,cnt=0;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
struct node{
	int x,y;
};
queue<node>q;
void bfs(int sx,int sy){
	int sum=0;
	q.push((node){sx,sy});
	b[sx][sy]=cnt;
	while(!q.empty()){
		node temp=q.front();
		q.pop();
		int xx=temp.x;
		int yy=temp.y;
		sum+=a[xx][yy];
		for(int i=0;i<4;i++){
			int nx=xx+dx[i];
			int ny=yy+dy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&b[nx][ny]==0&&a[nx][ny]!=-1){
				b[nx][ny]=cnt;
				q.push((node){nx,ny});
			}
		}
	}
	c[cnt]=sum;
}
int main(){
	freopen("C.in","r",stdin);
	freopen("C.out","w",stdout); 
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			a[i][j]=read();
			if(a[i][j]==-1)b[i][j]=-1;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]!=-1&&!b[i][j]){
				cnt++;
				bfs(i,j);
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==-1){
				int d[5];
				int cnt=0;
				for(int k=0;k<4;k++){
					int nx=i+dx[k];
					int ny=j+dy[k];
					if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!=-1){
						bool flag=0;
						for(int i=1;i<=cnt;i++){
							if(d[i]==b[nx][ny]){
								flag=1;
								break;
							}
						}
						if(!flag)d[++cnt]=b[nx][ny];
					}
				}
				for(int i=1;i<cnt;i++){
					for(int j=i+1;j<=cnt;j++){
						ans=max(ans,c[d[i]]+c[d[j]]);
					}
				}
			}
		}
	}
	print(ans);
	return 0;
}

2024/10/3 17:45
加载中...