20pts求调,考虑过凹槽了
  • 板块P1187 3D模型
  • 楼主oi_afish
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/29 22:55
  • 上次更新2025/7/30 12:07:31
查看原帖
20pts求调,考虑过凹槽了
1390911
oi_afish楼主2025/7/29 22:55
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,ans;
int map[1005][1005];
int main(){
    cin>>n>>m;
    swap(n,m);
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            char a;
            cin>>a;
            map[i][j]=a-'0';
        }
    }
    for (int i=1;i<=n;i++){
        int maxn=0;
        for (int j=1;j<=m;j++)maxn=max(maxn,map[i][j]);
        ans+=maxn;
    }
    for (int i=1;i<=m;i++){
        int maxn=0;
        for (int j=1;j<=n;j++)maxn=max(maxn,map[j][i]);
        ans+=maxn;
    }
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++)if (map[i][j])ans++;
    }
    for (int i=1;i<=n;i++){
        for (int j=0;j<=m;j++){
            if (map[i][j]>map[i][j+1]){
                for (int k=j+2;k<=m;k++){
                    if (map[i][k]>map[i][j+1]){
                        ans+=min(map[i][k],map[i][j])-map[i][j+1];
                        j=k;
                        break;
                    }
                }
            }
        }
    }
    for (int i=1;i<=m;i++){
        for (int j=0;j<=n;j++){
            if (map[j][i]>map[j+1][i]){
                for (int k=j+2;k<=n;k++){
                    if (map[k][i]>map[j+1][i]){
                        ans+=min(map[j][i],map[k][i])-map[j+1][i];
                        j=k;
                        break;
                    }
                }
            }
        }
    }
    ans*=2;
    cout<<ans;
    return 0;
}
2025/7/29 22:55
加载中...