QAQ,蒟蒻再次求助
  • 板块灌水区
  • 楼主jacky_zsq
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/5/9 21:40
  • 上次更新2023/11/7 02:46:18
查看原帖
QAQ,蒟蒻再次求助
263017
jacky_zsq楼主2020/5/9 21:40

题目长蛇阵 我的三种代码,大佬们能帮忙看看吗?谢谢。

第一种,横竖两个80

#include <bits/stdc++.h>
using namespace std;
bool b[1001][1001];
long long a[1001][1001];
int main() {
	long long ans=0,num1=0,num2=0,all=0,i,j,x,y,n,m;
	cin>>n>>m;
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			cin>>a[i][j];
		}
	}
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			if(a[i][j]==1&&!b[i][j]) {
				num1=num2=all=0;
				for(x=i-1,y=j; x>=1; x--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j; x<=n; x++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i,y=j-1; y>=1; y--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i,y=j+1; y<=m; y++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
			}
		}
	}
	if(ans==1) cout<<0<<endl;
	else cout<<ans<<endl;
	return 0;
}

60分的横竖+左上向右下

#include <bits/stdc++.h>
using namespace std;
bool b[1001][1001];
long long a[1001][1001];
int main() {
	long long ans=0,num1=0,num2=0,all=0,i,j,x,y,n,m;
	cin>>n>>m;
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			cin>>a[i][j];
		}
	}
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			if(a[i][j]==1&&!b[i][j]) {
				num1=num2=all=0;
				for(x=i-1,y=j; x>=1; x--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j; x<=n; x++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i,y=j-1; y>=1; y--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i,y=j+1; y<=m; y++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i-1,y=j-1; x>=1; x--,y--) {
					if(a[x][y]==0||y<1) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j+1; x<=n; x++) {
					if(a[x][y]==0||y>n) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

最后全方位50分:

#include <bits/stdc++.h>
using namespace std;
bool b[1001][1001];
long long a[1001][1001];
int main() {
	long long ans=0,num1=0,num2=0,all=0,i,j,x,y,n,m;
	cin>>n>>m;
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			cin>>a[i][j];
		}
	}
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			if(a[i][j]==1&&!b[i][j]) {
				num1=num2=all=0;
				for(x=i-1,y=j; x>=1; x--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j; x<=n; x++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i,y=j-1; y>=1; y--) {
					if(a[x][y]==0) break;
					else num1++,b[x][y]=true;
				}
				for(x=i,y=j+1; y<=m; y++) {
					if(a[x][y]==0) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i-1,y=j-1; x>=1; x--,y--) {
					if(a[x][y]==0||y<1) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j+1; x<=n; x++) {
					if(a[x][y]==0||y>n) break;
					else num2++,b[x][y]=true;
				}
					all=num1+num2;
					if(all>=ans) ans=all+1;
				num1=num2=all=0;
				for(x=i-1,y=j+1; x>=1; x--,y++) {
					if(a[x][y]==0||y>n) break;
					else num1++,b[x][y]=true;
				}
				for(x=i+1,y=j-1; x<=n; x++) {
					if(a[x][y]==0||y<1) break;
					else num2++,b[x][y]=true;
				}
				all=num1+num2;
					all=num1+num2;
					if(all>=ans) ans=all+1;
			}
		}
	}
	if(ans==1) cout<<0<<endl;
	else cout<<ans<<endl;
	return 0;
}

求帮助,纠错

2020/5/9 21:40
加载中...