Codeforces 808D Array Division 题解
来源:互联网 发布:淘宝箱小型印刷机 编辑:程序博客网 时间:2024/05/29 04:29
题意
给你一个序列,可以选择一个数移到另一个位置,问是否可以满足将序列分成两个非空连续部分后,两部分数之和相等
思路
先统计所有数之和,如果为奇数,显然不行,然后再从左到右求前缀和,如果前缀和正好是总和一半,那显然可以,如果超过了,就需要前部移一个给后部或者后部移一个给前部,先考虑前部移一个给后部,记下第一个超过的位置t,此时要想满足条件就需要从头到t中减掉一个,然后再加上从t+1开始一个连续区间的数字和满足条件,于是我们先把从t+1开始的连续区间的数字和放进一个set,再从头到t枚举减掉哪一个,看剩下需要的是否在set里,如果有就可以了,再考虑后部移一个给前部,其实是一样的方法,只是所有操作都变成了从右往左而已,如果都不行那就是不行了
代码
#include <cstdio>#include <set>using namespace std;long long a[100001];set<long long> s;int main(){ long long n,add,f,sum,t,add2; scanf("%I64d",&n); sum=0; for(long long i=0;i<n;i++) { scanf("%I64d",&a[i]); sum+=a[i]; } add=0; f=0; if(sum%2==1) printf("NO\n"); else { for(long long i=0;i<n;i++) { add+=a[i]; if(2*add==sum) { f=1; break; } else if(2*add>sum) { t=i; break; } } if(f==1) printf("YES\n"); else { add2=0; s.insert(add2); for(long long i=t+1;i<n;i++) { add2+=a[i]; s.insert(add2); } for(long long i=0;i<=t;i++) { if(s.count(sum/2-add+a[i])) { f=1; break; } } if(f==1) printf("YES\n"); else { add2=0; s.clear(); s.insert(add2); for(long long i=t-1;i>=0;i--) { add2+=a[i]; s.insert(add2); } for(long long i=n;i>=t;i--) { if(s.count(sum/2-(sum-add+a[t])+a[i])) { f=1; break; } } if(f==1) printf("YES\n"); else printf("NO\n"); } } } return 0;}
阅读全文
0 0
- Codeforces 808D Array Division 题解
- 【Codeforces 808 D. Array Division】+ 二分
- Codeforces 808D Array Division【思维】
- 808D Array Division
- codeforces 808D Array Division(二分+思维)
- Educational Codeforces Round 21 D. Array Division
- Educational Codeforces Round 21 D Array Division
- codeforces Educational Codeforces Round 21 D. Array Division
- cf 808D Array Division(二分思维)@
- Educational Codeforces Round 21 D. Array Division(前缀和,二分)
- CF 808D D. Array Division(二分)
- codeforcodeforces 808D——Array Division(查找,set)
- codeforces A. Array题解
- codeforces 594D题解
- 【CODEFORCES】 D. Interesting Array
- Array Division
- codeforces D. Ice Sculptures 题解
- Codeforces 325D Reclamation 题解
- (再次理解strong与weak)强引用与弱引用
- Android Studio导入工程的正确姿势
- 机器学习实战——python实现DBSCAN密度聚类
- 如何选择ESD保护元件- TVS器件(压敏电阻,聚合物,硅二极管)
- 组件和自定义指令的区别
- Codeforces 808D Array Division 题解
- lanuch.java
- Bootstrap三种表单布局的使用方法
- Git客户端SourceTree的使用
- jquery中prop()方法和attr()方法的区别浅析
- 信息安全工程师 学习笔记(三十五)
- android之单位
- Selenium遇到Iframe,无法直接准确定位
- Gogland use goimports