zoukankan      html  css  js  c++  java
  • Codeforces1141F_Same Sum Blocks

    题意

    给定一个序列,求最多的不相交区间满足区间和相同。

    分析

    • 从暴力的角度想,是枚举区间再求和,反过来想,直接记录每个和对应是那些区间,然后排个序求最大不相交即可。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1550;
    int n;
    ll a[N],p[N];
    vector<pair<int,int>> ans,t;
    map<ll,vector<pair<int,int>>> mp;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%lld",&a[i]);
            p[i]=p[i-1]+a[i];
        }
        for(int l=1;l<=n;l++){
            for(int r=l;r<=n;r++){
                ll s=p[r]-p[l-1];
                mp[s].push_back({r,l});
            }
        }
        for(auto mx:mp){
            auto v=mx.second;
            int siz=v.size();
            sort(v.begin(),v.end());
            int tmp=0;
            int lst=0;
            for(int i=0;i<siz;i++){
                if(v[i].second>lst){
                    lst=v[i].first;
                    tmp++;
                }
            }
            if(tmp>ans.size()){
                ans.clear();
                lst=0;
                for(int i=0;i<siz;i++){
                    if(v[i].second>lst){
                        lst=v[i].first;
                        ans.push_back({v[i].second,v[i].first});
                    }
                }
            }
        }
        int siz=ans.size();
        printf("%d
    ",siz);
        for(int i=0;i<siz;i++){
            printf("%d %d
    ",ans[i].first,ans[i].second);
        }
        return 0;
    }
    
  • 相关阅读:
    八、多线程爬虫之糗事百科案例
    七、数据提取之JSON与JsonPATH
    Day_03
    六、CSS 选择器:BeautifulSoup4
    Day_01
    Day_02
    图解递归函数
    第十章 提权
    提权篇
    Webshell篇
  • 原文地址:https://www.cnblogs.com/zxcoder/p/11723107.html
Copyright © 2011-2022 走看看