CodeForces - 675C Money Transfers (map&技巧)

原创 2016年05月30日 22:27:22
CodeForces - 675C
Time Limit:                                                        1000MS                          Memory Limit:                                                        262144KB                          64bit IO Format:                            %I64d & %I64u                       

Status

Description

There are n banks in the city where Vasya lives, they are located in a circle, such that any two banks are neighbouring if their indices differ by no more than 1. Also, bank 1 and bank n are neighbours if n > 1. No bank is a neighbour of itself.

Vasya has an account in each bank. Its balance may be negative, meaning Vasya owes some money to this bank.

There is only one type of operations available: transfer some amount of money from any bank to account in any neighbouring bank. There are no restrictions on the size of the sum being transferred or balance requirements to perform this operation.

Vasya doesn't like to deal with large numbers, so he asks you to determine the minimum number of operations required to change the balance of each bank account to zero. It's guaranteed, that this is possible to achieve, that is, the total balance of Vasya in all banks is equal to zero.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of banks.

The second line contains n integers ai ( - 109 ≤ ai ≤ 109), the i-th of them is equal to the initial balance of the account in the i-th bank. It's guaranteed that the sum of all ai is equal to 0.

Output

Print the minimum number of operations required to change balance in each bank to zero.

Sample Input

Input
3
5 0 -5
Output
1
Input
4
-1 0 1 0
Output
2
Input
4
1 2 3 -6
Output
3

Sample Output

Hint

Source

//题意:
小明在n个银行中有存款也有欠款,并且存款总和与欠款总和相等,问小明要经过几次周转才能使所有的银行中的钱数都为0,。
Hait:这几个是两两相邻的,并且第一个与最后一个是相邻的,每次周转只能在两个相邻的银行之间进行。
//思路:
因为最终是和为0的,所以用map记录每次输入后的和出现的个数,一直找最小的次数就行了。就是一个思想(起初我也不太懂,但看了大神的代码自己又推了一遍,感觉这思想好厉害)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<map>
#define INF 0x3f3f3f3f
#define ll long long
#define M 1000000007
#define N 100010
using namespace std;
map<ll,int>mp;
int main()
{
	int n,m;
	while(scanf("%d",&n)!=EOF)
	{
		int ans=n-1;
		ll sum=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&m);
			sum+=m;
			++mp[sum];
			ans=min(ans,n-mp[sum]);			
		}
		printf("%d\n",ans);
		mp.clear();
	}
	return 0;
} 

 

关于codeforces比赛规则介绍(转载)

Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com   这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学、由Mike Mirz...
  • y990041769
  • y990041769
  • 2014年02月19日 08:41
  • 15400

Codeforces 11D A Simple Task 统计简单无向图中环的个数

状态压缩动态规划计算简单无向图中简单环的个数。
  • fangzhenpeng
  • fangzhenpeng
  • 2015年10月12日 19:01
  • 1207

spring MVC的一些小技巧

spring MVC的一些小技巧1,在controller中获取指定name的bean/*** * * @param request * @param beanName...
  • hw1287789687
  • hw1287789687
  • 2015年04月03日 00:00
  • 1760

codeforces 675C Money Transfers

There are n banks in the city where Vasya lives, they are located in a circle, such that any two ban...
  • qiuxueming_csdn
  • qiuxueming_csdn
  • 2016年05月29日 00:36
  • 300

Codeforces Round #353 (Div. 2) C. Money Transfers (map)

C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input stan...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年09月04日 16:36
  • 349

Codeforces Round #353 (Div. 2) C. Money Transfers

There are n banks in the city where Vasya lives, they are located in a circle, such that any two ban...
  • u014258433
  • u014258433
  • 2016年05月17日 16:22
  • 417

Codeforces Round #353 (Div. 2) C.Money Transfers

C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input stan...
  • qq_28146747
  • qq_28146747
  • 2016年05月26日 23:54
  • 84

Codeforces Round #353 (Div. 2) C. Money Transfers(数学题)

K - Money Transfers Time Limit:1000MS    Memory Limit:262144KB    64bit IO Format:%I64d & %I64u...
  • qq845579063
  • qq845579063
  • 2016年05月25日 12:08
  • 177

Codeforces Round #353 (Div. 2) C. Money Transfers 环、贪心、前缀和推广、好题

首先最多是ans = n-1次,这个时候只有sum总是0; 否则, 只有 有一个小区间是 0, 则ans就少1次; 所以要找到,尽可能多的sum == 0 的区间。 当时一直不知道,环该怎么处理, 结...
  • ProLightsfxjh
  • ProLightsfxjh
  • 2016年05月17日 20:03
  • 1457

codeforces C. Money Transfers 贪心

C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input stan...
  • liyunlong41
  • liyunlong41
  • 2016年05月18日 10:29
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeForces - 675C Money Transfers (map&技巧)
举报原因:
原因补充:

(最多只允许输入30个字)