CF 675C Money Transfers
来源:互联网 发布:南风知我意在线阅读 编辑:程序博客网 时间:2024/05/01 05:24
题目大意:有n个银行编号为1-n,n视作与1相邻,每个银行有
题解:
1.每个相邻的银行之间最多发生一次转移,因此最多转移次数为n次。
2.若能分成k段不相交的和为0的区间,则只有区间内部的银行需要转移,而相邻的区间之间不需要转移,即减少了k次转移。
3. 因此只需要将银行分成最多的和为0的区间,在区间内部转移即可。问题变成求最大的不相交和为0的区间数。
和为0的区间实际上是两段前缀和相同的区间的差,因此只要统计相同的前缀和的个数,每一种前缀和对应的是一个和为0的区间划分。若有k个前缀和相同,由于是环形的,因此该划分分成了k个和为0的区间。找到最大的划分方案数k,那么n-k就是答案。
#include <cstdio>#include <vector>#include <queue>#include <cstring>#include <algorithm>using namespace std;const int maxn = 200020;const int inf = 0x3f3f3f3f;typedef long long ll;vector<pair<ll,int> > HasH[maxn];ll a[maxn];int main(){ int n; scanf("%d",&n); for(int i= 0;i < n;i++) scanf("%I64d",&a[i]); int ans = n; int k = (a[0]%maxn+maxn)%maxn; HasH[k].push_back(pair<ll,int>(a[0],1)); for(int i = 1;i < n;i++){ a[i] += a[i-1]; k = (a[i]%maxn+maxn)%maxn; int flag = 1; for(int j = 0;j < HasH[k].size();j++){ pair<ll,int> t = HasH[k][j]; if(t.first == a[i]){ HasH[k][j].second++; break; } } HasH[k].push_back(pair<ll,int>(a[i],1)); } int cnt = 0; for(int i = 0;i < maxn;i++){ for(int j = 0;j < HasH[i].size();j++){ cnt = max(HasH[i][j].second,cnt); //printf("%d\n",HasH[i][j].second); } } printf("%d\n",ans-cnt); return 0;}
0 0
- CF 675C Money Transfers
- codeforces 675C Money Transfers
- Codeforce - 675 - C. Money Transfers
- CodeForces 675 C Money Transfers
- CodeForces #675 c.Money Transfers
- codeforces 675c Money Transfers
- Codeforces 675C Money Transfers (扫描)
- Codeforces 675C Money Transfers【贪心】
- Codeforces--675C--Money Transfers(思维)
- CodeForces - 675C Money Transfers (map&技巧)
- codeforces 675C Money Transfers(贪心)
- CodeForces 675 C. Money Transfers(贪心)
- Money Transfers(CF #353 Div. 2)
- codeforces C. Money Transfers 贪心
- codeforces 675C Money Transfers(想法题)
- Money Transfers
- Codeforces 675C Money Transfers 【思维】 + 675D Tree Construction 【二分】
- Codeforces 675C Money Transfers【贪心】【新年快乐】T T窝要去打联盟咯!
- leetcode--n_queens&&n_queens_II
- AD入门
- 物联网需要什么样的应用开发语言?
- 敌兵布阵
- Android Studio Git版本管理 配置
- CF 675C Money Transfers
- Mysql索引概念和存储过程
- LATEX公式与特殊字符
- 第十三周 项目5 --拓扑排序算法验证
- c语言之标准(K&RC 、c89、c99、c11)
- thinkphp 执行sql语句,表前缀问题
- bzoj 2229: [Zjoi2011]最小割 分治最小割(最小割树)
- nefuoj 16 Function Run Fun
- JAVA List删除时需注意的地方