CF1036D Vasya and Arrays 题解
Content
给定两个长度分别为 \(n\) 和 \(m\) 的数列 \(A,B\)。你需要将两个数列都恰好分成 \(k\) 份,使得两个数列中第 \(i(i\in[1,k])\) 份的元素和对应相等。问是否可行,并在可行的情况下求出最大的 \(k\)。
数据范围:\(1\leqslant n,m\leqslant 3\times 10^5\),\(1\leqslant A_i,B_i\leqslant 10^9\)。
Solution
我们先将两个数列中的所有数的和加起来,记为 \(S_A,S_B\)。显然,如果 \(S_A\neq S_B\),那么显然我们无法满足题目中的要求。
否则,我们采用双指针的方式,每次移动就记录下当前两个序列的前缀和,记为 \(s_A,s_B\)。
- 如果 \(s_A<s_B\),那么我们将数列 \(A\) 在当前位置下往前移一位。
- 如果 \(s_A>s_B\),那么我们将数列 \(B\) 在当前位置下往前移一位。
- 否则,我们将答案加 \(1\)(就相当于在这里把还未分进去的元素分成一份了),然后选择任意一个数列在当前位置下往前移一位。
输出答案即可。复杂度为 \(\mathcal{O}(n)\),足以通过本题。
Code
int a[300007], b[300007], visa[300007], visb[300007], ans;
ll sa, sb, suma, sumb;
int main() {
int n = Rint; F(int, i, 1, n) suma += (a[i] = Rint);
int m = Rint; F(int, i, 1, m) sumb += (b[i] = Rint);
if(suma != sumb) return printf("-1"), 0;
for(int i = 1, j = 1; i <= n && j <= m;) {
sa += 1ll * a[i] * (1 - visa[i]), sb += 1ll * b[j] * (1 - visb[j]), visa[i] = visb[j] = 1; //为了避免重复加入前缀和,开 vis 数组记录当前元素是否已经加入前缀和。
if(sa == sb) ans++, sa = sb = 0, i++;
else if(sa > sb) j++;
else i++;
}
return write(ans), 0;
}
CF1036D Vasya and Arrays 题解的更多相关文章
- D. Vasya and Arrays
链接 [http://codeforces.com/contest/1036/problem/D] 题意 给你两个数组长度分别为n,m; 有这么一种操作,用某个数组的某个子区间元素之和代替这个子区间, ...
- CF493A Vasya and Football 题解
Content 有两个球队在踢足球,现在给出一些足球运动员被黄牌或红牌警告的时间,求每个队员第一次被红牌警告的时间. 注意:根据足球比赛规则,两张黄牌自动换成一张红牌. 数据范围:比赛时间 \(90\ ...
- CF1082A Vasya and Book 题解
Content 给定 \(T\) 组数据,每组数据给出四个整数 \(n,x,y,d\).小 V 有一本 \(n\) 页的书,每次可以恰好翻 \(d\) 页,求从第 \(x\) 页恰好翻到第 \(y\) ...
- AT3589 Similar Arrays 题解
Content 给定一个长度为 \(n\) 的序列 \(a\).定义两个序列 \(x,y\) 是相似的,当且仅当 \(\forall i\in[1,n],|x_i-y_i|\leqslant 1\). ...
- CF1065A Vasya and Chocolate 题解
Content 小 V 有 \(s\) 块钱,商店里有巧克力卖,每块巧克力 \(c\) 块钱,现在商店给出优惠:购买 \(a\) 块巧克力可以免费获得 \(b\) 块巧克力,求小 V 最多能够买到的巧 ...
- CodeForces 620D Professor GukiZ and Two Arrays 双指针
Professor GukiZ and Two Arrays 题解: 将a数组都sort一遍之后, b数组也sort一遍之后. 可以观察得到 对于每一个ai来说, 整个数组bi是一个V型的. 并且对于 ...
- CF915G Coprime Arrays (莫比乌斯反演)
CF915G Coprime Arrays 题解 (看了好半天终于看懂了) 我们先对于每一个i想,那么 我们设 我们用莫比乌斯反演 有了这个式子,可比可以求出△ans呢?我们注意到,由于那个(i/d) ...
- Codeforces Edu Round 50 A-D
A. Function Height 由于只能提升\(x\)为奇数的点,每个三角形的底一定为\(2\), 则要求我们求: \(2 * (h_1 + h_2 + - + h_n) / 2 = k\),使 ...
- Educational Codeforces Round 50
1036A - Function Height 20180907 \(ans=\left \lceil \frac{k}{n} \right \rceil\) #include<bits/ ...
随机推荐
- buu
buuCTFwp(1~32) 1.签到题 题里就有flag flag{buu_ctf} 2.二维码 1.题目是一个二维码,用010发现提示四位数字,想到应该是暗藏压缩包 2.虚拟机foremost分离 ...
- Codeforces 1119H - Triple(FWT)
Codeforces 题目传送门 & 洛谷题目传送门 FWT 的 immortal tea %%% 首先我们可以写出一个朴素的 \(dp\),设 \(dp_{i,j}\) 表示考虑前 \(i\ ...
- 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)
洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...
- 洛谷 P5048 - [Ynoi2019 模拟赛] Yuno loves sqrt technology III(分块)
题面传送门 qwq 感觉跟很多年前做过的一道题思路差不多罢,结果我竟然没想起那道题?!!所以说我 wtcl/wq 首先将 \(a_i\) 离散化. 如果允许离线那显然一遍莫队就能解决,复杂度 \(n\ ...
- LG 11 月 月赛 II T4
LG 11 月 月赛 II T4 看到膜数和 $ 10^5 $ 以及 $ n^2 $ 的部分分想到很可能是 NTT 于是开始推式子 首先看到式子可以化作, 如果 \(k = 0\) , $ f(l , ...
- Can't connect to HTTPS URL because the SSL module is not available. - skipping
今天用pip3安装第三方库的时候报了这样一个错: Can't connect to HTTPS URL because the SSL module is not available. - skipp ...
- JAVA中null,"",equals,==相互之间使用详解
"equals" 与 "==" "equals"只是比较值是否相同 而"=="则是比较两个变量是不是同一个变量,也应时是 ...
- typedef定义数组
typedef定义数组 问题来源 在学习高一凡数据结构与算法解析串这一章节时,遇到如下代码不明白其意义,经过查阅终于搞明白 typedef unsigned char SString[MAXLEN + ...
- python 多态、组合、反射
目录 多态.多态性 多态 多态性 鸭子类型 父类限制子类的行为 组合 面向对象的内置函数 反射 多态.多态性 多态 多态通俗理解起来,就像迪迦奥特曼有三种形态一样,怎么变还是迪迦奥特曼 定义:多态指的 ...
- Nested Classes in C++
A nested class is a class which is declared in another enclosing class. A nested class is a member a ...