zoukankan      html  css  js  c++  java
  • Codeforces #353 (Div. 2)C 贪心脑洞题

    太弱了。。还是笨。。

    原题

    这题脑洞题,说一下贪心思路。

    首先我们注意到 如果连续一段和为0,其他部分耿直的转移,那么就能少移动一次(中间不考虑子段,只让这一段变成了0),

    如果 这一段后面还有连续的一段和为0 ,那么就能少移动两次。。

    以此类推。。。

    例如 xxxxxxxxxxx1 2 -2 -1 1 -1xxxxxxxx

    如果中间那些耿直的移动一定是要移动6次才能都是0的,如果分成两段的话,明显只要4次。。

    ps。为什么断开不行?因为断开中间的那些是要跨过两段的0 的,这样和中间断开至少有一个,那么好不容易节约下来的又要被移动中间那个花费掉了(甚至更多)。

    所以就有了贪心策略,找到最多的连续0的方法。。这里就要考虑维护前缀和了。。

    PPS。是个环你没有考虑呀?

    其实不然,当我们取出最长的若干段的时候,剩下的一定是和为 0 。那么就很愉快了,答案就是 N - ANS 了。。

    写这么多可能还是没讲清楚,请大家见谅,确实自己理解也不深刻,蒟蒻加油吧~

    #include <bits/stdc++.h>
    
    using namespace std;
    
    map<long long,long long> mp;
    
    int main(){
        int n ,x ;
        long long ans=0;
        long long sum=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            sum+=x;
            ans=max(ans,++mp[sum]);
        }
        cout<<n-ans<<endl;
        return 0;
    }
    



  • 相关阅读:
    fileupload的乱码解决
    关于WEB-INF文件夹中的内容
    复习,关于server.xml的一点理解
    使用eclipse kepler,结果getServletContext可用了
    拷贝内容到eclipse中导致JSP的auto-completion不工作
    eclipse新建tomcat server但是总是报404的解决方法
    flex 自定义事件
    flex TweenLite
    flex 坐标系
    flex DataGroup
  • 原文地址:https://www.cnblogs.com/zhangxianlong/p/10672562.html
Copyright © 2011-2022 走看看