博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Educational Codeforces Round 21 D. Array Division
阅读量:4608 次
发布时间:2019-06-09

本文共 938 字,大约阅读时间需要 3 分钟。

题目链接:

题意:

给你n个数,现在你可以改变1<=个数的位置,然后问你是否存在有一个k,使得sum(a[i])(1<=i<=k)==sum(a[j])(k+1<=j<=n)

题解:

 分析:

如果需要将一个数移动,无非就是将这个数从第一部分移到第二部分,或者从第二部分移到第一部分。

所以,我们只需要开两个map来记录一下两部分有哪些数。

当两部分的差值/2等于其中一部分的一个数时,那么就可以YES了。

1 #include
2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef long long ll; 5 6 const int N=1e5+7; 7 ll a[N]; 8 map
mp; 9 map
mp2;10 int main()11 {12 int n;ll sum1=0,sum2=0;13 scanf("%d",&n);14 F(i,1,n)scanf("%lld",a+i),sum2+=a[i],mp[a[i]]++;15 if(sum2&1){puts("NO");return 0;}16 ll aim=sum2/2;17 F(i,1,n)18 {19 ll tp=sum2-aim;20 if(tp>0&&mp[tp]>0){puts("YES");return 0;}21 if(tp<0&&mp2[-tp]>0){puts("YES");return 0;}22 sum2-=a[i];23 mp[a[i]]--;24 mp2[a[i]]++;25 }26 puts("NO");27 return 0;28 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/6905633.html

你可能感兴趣的文章
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
MySQL数据库免安装版配置
查看>>
你必知必会的SQL面试题
查看>>
html5 Canvas绘制时钟以及绘制运动的圆
查看>>
Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween
查看>>
JavaScript空判断
查看>>