codeforces 808 D. Array Division(二分)
题目链接:http://codeforces.com/contest/808/problem/D
题意:有一串长度为n的数组,要求选择一个数字交换它的位置使得这串数能够分成两串连续的和一样的数组。
这个数还可以和自己交换位置。
题解:很显然求一下前缀二分每个数看一下能否插入,再求一下后缀二分每个数看一下能否插入。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int M = 1e5 + 10;
ll a[M] , be[M] , af[M];
bool binsearch(int l , int r , ll sum , ll gg[] , int pos) {
int mid = (l + r) >> 1;
while(l <= r) {
mid = (l + r) >> 1;
if(gg[mid] == sum) {
if(pos == mid) return false;
else return true;
}
if(gg[mid] > sum) r = mid - 1;
if(gg[mid] < sum) l = mid + 1;
}
return false;
}
bool binsearch2(int l , int r , ll sum , ll gg[] , int pos) {
int mid = (l + r) >> 1;
while(l <= r) {
mid = (l + r) >> 1;
if(gg[mid] == sum) {
if(pos == mid) return false;
else return true;
}
if(gg[mid] > sum) l = mid + 1;
if(gg[mid] < sum) r = mid - 1;
}
return false;
}
int main() {
int t;
scanf("%d" , &t);
for(int i = 1 ; i <= t ; i++) {
scanf("%lld" , &a[i]);
}
ll sum = 0;
for(int i = 1 ; i <= t ; i++) {
sum += a[i];
}
if(sum % 2 != 0) {
printf("NO\n");
}
else {
be[0] = 0;
for(int i = 1 ; i <= t ; i++) {
be[i] = be[i - 1] + a[i];
}
af[t + 1] = 0;
for(int i = t ; i >= 1 ; i--) {
af[i] = af[i + 1] + a[i];
}
ll aim = sum / 2;
int flag = 0;
for(int i = 1 ; i <= t ; i++) {
if(be[i] == aim) {flag = 1; break;}
}
for(int i = 1 ; i <= t ; i++) {
if(flag) break;
bool temp = binsearch(0 , i , aim - a[i] , be , i);
if(temp) {flag = 1; break;}
temp = binsearch2(i , t + 1 , aim - a[i] , af , i);
if(temp) {flag = 1; break;}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
codeforces 808 D. Array Division(二分)的更多相关文章
- Educational Codeforces Round 21 D.Array Division(二分)
D. Array Division time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- Codeforces 482B Interesting Array(线段树)
题目链接:Codeforces 482B Interesting Array 题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是 ...
- Codeforces 1077C Good Array 坑 C
Codeforces 1077C Good Array https://vjudge.net/problem/CodeForces-1077C 题目: Let's call an array good ...
- Array Division 808D
D. Array Division time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- codeforces 482B. Interesting Array【线段树区间更新】
题目:codeforces 482B. Interesting Array 题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val. 就是区间l---r上的与的值为val,最后问你原来的数 ...
- codeforces 407C Curious Array
codeforces 407C Curious Array UPD: 我觉得这个做法比较好理解啊 参考题解:https://www.cnblogs.com/ChopsticksAN/p/4908377 ...
- codeforces 797 E. Array Queries【dp,暴力】
题目链接:codeforces 797 E. Array Queries 题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为 ...
- Educational Codeforces Round 21 D - Array Division (前缀和+二分)
传送门 题意 将n个数划分为两块,最多改变一个数的位置, 问能否使两块和相等 分析 因为我们最多只能移动一个数x,那么要么将该数往前移动,要么往后移动,一开始处理不需要移动的情况 那么遍历sum[i] ...
- codeforces 808 E. Selling Souvenirs (dp+二分+思维)
题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...
随机推荐
- Linux-Windows 端口转发
在实际的生产环境中,我们为了安全性,会将一些重要的服务(数据库服务)不开放外网访问,但是当我们某个时刻由于一些特殊需求,需要进行外网访问的时候,我们可以通过端口转发来实现.通过一台和与服务可以互相访问 ...
- Spring源码解析——循环依赖的解决方案
一.前言 承接<Spring源码解析--创建bean>.<Spring源码解析--创建bean的实例>,我们今天接着聊聊,循环依赖的解决方案,即创建bean的ObjectFac ...
- Unittest 支持 case 失败后自动截图功能的另外两种方式
原生的unittest框架是不支持case失败后自动截图的功能的,网上看了大家的解决办法,大体上分为两种:1.要么加装饰器2.也有人封装断言这里我们看看还有没有其他的更加方便的方法值得大家一起探讨一下 ...
- 控制台出现_ob_:Obsever
我遇到一个问题:我的代码想让他点击之后得到经纬度坐标数组,然后我就这样写了 然而控制台却读取出了
- 论文阅读 | Falcon: Balancing Interactive Latency and Resolution Sensitivity for Scalable Linked Visualizations
作者: Dominik Moritz, Bill Howe, Jeffrey Heer 发表于CHI 2019, 三位作者都来自于University of Washington Interactiv ...
- Spring Cloud下基于OAUTH2+ZUUL认证授权的实现
Spring Cloud下基于OAUTH2认证授权的实现 在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认 ...
- Kafka面试,看这篇文章就够了
原文链接:https://mp.weixin.qq.com/s/zxPz_aFEMrshApZQ727h4g** 引言 MQ(消息队列)是跨进程通信的方式之一,可理解为异步rpc,上游系统对调用结果的 ...
- IPC机制1
1.Android IPC简介 Inter-Process Communication的缩写就是IPC,含义是进程间通信或是跨进程间通信,是指两个进程进行交换数据的过程. 进程是什么? 进程在pc上就 ...
- Web 字体 font-family 再探秘
之前写过一篇关于Web字体简介及使用技巧的文章: 你该知道的字体 font-family. 该篇文章基本没有太多移动端的字体选择及分析.并且过了这么久,如今的 Web 字体又有了一些新的东西,遂有此文 ...
- Markdown的最常用标记符号
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. md就是markdown 如果你要把这段文字定义成标题,只需要在前面加上一个#号, ...