比赛 csp2025模拟练习3 评测结果 AWAAAAAWA
题目名称 Symmetric Mountains 最终得分 78
用户昵称 陆晨洗 运行时间 0.126 s
代码语言 C++ 内存使用 3.81 MiB
提交时间 2025-10-30 10:40:34
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n;
int h[5010]={0};
int q[5010]={0};
int m[310][310]={0};
int main()
{
    freopen("Mountains.in","r",stdin);
    freopen("Mountains.out","w",stdout);
    int ans,sum,i,j,k;
    cin>>n;
    if(n<=300)
    {
        for(i=1;i<=n;i++)
        {
            cin>>h[i];
            for(j=1;j<i;j++)
            {
                m[j][i]=abs(h[i]-h[j]);
                m[i][j]=m[j][i];
            }
        }
        for(i=1;i<=n;i++)
        {
            ans=-1;
            if(i==1)
            {
                cout<<"0"<<" ";
                continue;
            }
            for(j=1;j<=n-i+1;j++)
            {   sum=0;
                for(k=j;k<=j+i/2;k++)
                {
                    sum=sum+m[k][k+i/2];
                }
                if(ans>sum||ans==-1)
                {
                    ans=sum;
                }
            }
            cout<<ans<<" ";
        }
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            cin>>h[i];
            q[i]=q[i-1]+h[i];
        }
        for(i=1;i<=n;i++)
        {
            ans=-1;
            if(i==1)
            {
                cout<<"0"<<" ";
                continue;
            }
            for(j=1;j<=n-i+1;j++)
            {
                sum=q[i+j-1]-q[i/2+j+(i%2)-1]-q[i/2+j-1]+q[j-1];
                if(ans>sum||ans==-1)
                {
                    ans=sum;
                }
            }
            cout<<ans<<" ";
        }
    }
    return 0;
}