题目长蛇阵 我的三种代码,大佬们能帮忙看看吗?谢谢。
第一种,横竖两个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;
}
求帮助,纠错