返回题目问答
讨论 / 题目问答/ 帖子详情

为啥我这样写也能过我感觉自己写错了但是能过数据是不是水了

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n' 
typedef pair<int,int>pii;
#define N 10100

int s[N],a[N];
signed main(){  
    ios::sync_with_stdio(false); 
    cin.tie(nullptr);   
    int n;
    cin>>n;
    vector<pii>v;
    for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            v.push_back({s[j]-s[i-1],i});
        }
    }
    sort(v.begin(),v.end());
    int ans=1e18;
     for(int i=0;i<v.size()-1;i++){
         if(v[i].second!=v[i+1].second) ans=min(ans,v[i+1].first-v[i].first);
     }
    cout<<ans<<endl;
    return 0 ;
}
2 回复 0 转发 0 喜欢 131 阅读
回复 (2)
默认 最新
xmas 2024/5/2
3
4 81 31


能 hack
0
fanshui 2024/4/16
没问题,因为这样写只会多枚举交叉的段
,而交叉段的答案不影响最终结果(同时剪掉中间的就不相交了)
0