题意:n个银行。 其中存款有+有-。 总和为0。 n个银行两两相邻((1,n),(1,2)...(n-1,n)); 问最少移动几次(只能相邻移动)能把所有数变为0。

  分析:思路很简单,起始答案算它为n,然后每存在一段,这段的和为0(包括就一个0的情况),这个答案就减1。如1 2 3 -6,只有一段,那么答案是4-1=3。如果是3 5 -5 -3,因为第一个和最后一个也算一段,所以共两段,答案是4-2=2。至于为什么这么做呢,因为一段的长度为len,那么从一个点出发遍历这一段需要移动len-1次(这个出发点不需要再遍历),所以每多和为0的一段,答案减1即可。

  那么我们怎么用O(n)来维护呢?不妨先看代码:

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

  手动模拟一下就很好理解了,这个代码还有一个巧妙的地方在于,可以解决头尾相连的问题,如果头尾不能够移动,那么最终的答案应该是n-M[0]。具体的仔细想想就明白了,还是挺奥义的- -。

  看着这个O(n)的维护方法,突然想起之前做的某题,http://www.cnblogs.com/zzyDS/p/5650397.html

  

CodeForces 675C Money Transfers(贪心+奥义维护)的更多相关文章

  1. Codeforces 675C Money Transfers 思维题

    原题:http://codeforces.com/contest/675/problem/C 让我们用数组a保存每个银行的余额,因为所有余额的和加起来一定为0,所以我们能把整个数组a划分为几个区间,每 ...

  2. codeforces 675C Money Transfers map

    上面是官方题解,写的很好,然后就A了,就是找到前缀和相等的最多区间,这样就可以减去更多的1 然后肯定很多人肯定很奇怪为什么从1开始数,其实从2开始也一样,因为是个环,从哪里开始记录前缀和都一样 我们的 ...

  3. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  4. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  5. codeforces 675C C. Money Transfers(贪心)

    题目链接: C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input stan ...

  6. Codeforces 626G Raffles 【贪心】【线段树】

    题意: 给n个奖池,t张彩票,q次操作. 每个奖池的奖金为pi. 每个奖池现有的彩票的数量为ai,保证ai>=1: q次操作,每次有两种,第i个奖池的现有彩票数量加一,或减一. 不允许投票的数量 ...

  7. Codeforces 161 B. Discounts (贪心)

    题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...

  8. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  9. Codeforces Gym 100803C Shopping 贪心

    Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...

随机推荐

  1. caffe的python接口

    http://blog.csdn.net/lu597203933/article/details/46742199 hadoop改成自己名字

  2. 排序算法总结(四)快速排序【QUICK SORT】

    感觉自己这几篇都是主要参考的Wikipedia上的,快排就更加是了....wiki上的快排挺清晰并且容易理解的,需要注意的地方我也添加上了注释,大家可以直接看代码.需要注意的是,wikipedia上快 ...

  3. Ant——ant的使用

    ---------------------------------------------------------------------------------------------------- ...

  4. jquery选择器之层级选择器

    HTML示例代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. CompositeConfiguration的用法

    public class Mytest { private static ApplicationContext applicationContext; public static void main( ...

  6. jquery checkbox反复调用attr('checked', true/false)只有第一次生效

    /** * 全选 */ function checkAll() { $("input[name=ids]").attr("checked", true); } ...

  7. MVC:上传文件时限制文件类型

    之前写过一篇:MVC:上传文件 今天补充下一个功能:如何限制上传文件类型 文件类型可以在前段限制,但是太容易被绕过,最好还是在后端处理. 修改upload方法代码: [HttpPost] public ...

  8. php 二维数组(没啥技术含量)

    <?php $cars = array( array('benchi',20,18), array('baoma',30,21), array('aodi',23,9) ); echo $car ...

  9. 在.NET中使用EPPlus生成Excel报表 .

    --摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...

  10. Objective-C语法之KVO的使用

    简介: 上篇我们讲到了KVC,这篇我们学习KVO,全名为:Key Value Observing,直译为:基于键值的观察者. 那它有什么用呢?KVO主要用于视图交互方面,比如界面的某些数据变化了,界面 ...