Romantic Glasses (Codeforces 1915E)
Tags: Greedy, data structures

Iulia has $$$n$$$ glasses arranged in a line. The $$$i$$$-th glass has $$$a_i$$$ units of juice in it. Iulia drinks only from odd-numbered glasses, while her date drinks only from even-numbered glasses.To impress her date, Iulia wants to find a contiguous subarray of these glasses such that both Iulia and her date will have the same amount of juice in total if only the glasses in this subarray are considered. Please help her to do that.More formally, find out if there exists two indices $$$l$$$, $$$r$$$ such that $$$1 \leq l \leq r \leq n$$$, and $$$a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r} = a_{l + 1} + a_{l + 3} + \dots + a_{r-1}$$$ if $$$l$$$ and $$$r$$$ have the same parity and $$$a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r - 1} = a_{l + 1} + a_{l + 3} + \dots + a_{r}$$$ otherwise.

Input: The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases.The first line of each test case contains a single integer $$$n$$$ ($$$1 \leq n \leq 2 \cdot 10^5$$$) — the total number of glasses.The second line of each test case contains $$$n$$$ integers $$$a_1, \ldots, a_n$$$ ($$$1 \leq a_i \leq 10^9$$$) — the amount of juice in each glass.The sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, output "YES" if there exists a subarray satisfying the condition, and "NO" otherwise.You can output the answer in any case (for example, the strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive answer).

Note: In the first test case, Iulia can pick $$$l=1$$$ and $$$r=3$$$. Then she drinks $$$a_1+a_3=1+2=3$$$ units and her date drinks $$$a_2=3$$$ units of juice.In the second test case, Iulia can pick $$$l=2$$$ and $$$r=5$$$. Then she drinks $$$a_3+a_5=1+1=2$$$ units and her date drinks $$$a_2+a_4=1+1=2$$$ units of juice.In the third test case no such contiguous subarray works.In the fourth test case, Iulia can pick $$$l=2$$$ and $$$r=8$$$. Then she drinks $$$a_3+a_5+a_7=11+1+1=13$$$ units and her date drinks $$$a_2+a_4+a_6+a_8=2+4+5+2=13$$$ units of juice.

Sample Inputs:
6
3
1 3 2
6
1 1 1 1 1 1
10
1 6 9 8 55 3 14 2 7 2
8
1 2 11 4 1 5 1 2
6
2 6 1 5 7 8
9
2 5 10 4 4 9 6 7 8

Sample Outputs:
YES
YES
NO
YES
NO
YES

Solution (Python):
from sys import stdin

def check(arr):
    n = len(arr)
    ballance = 0
    all_ballances = [0] * (n + 1)
    for (i, a) in enumerate(arr):
        if i % 2 == 0:
            ballance += a
        else:
            ballance -= a
        all_ballances[i] = ballance
    return len(set(all_ballances)) <= n
for s in [*open(0)][2::2]:
    arr = list(map(int, s.split()))
    print('YES' if check(arr) else 'NO')

Solution (Python):
from sys import stdin

def main():
    input = stdin.readline
    t = int(input())
    for _ in range(t):
        ans = 'NO'
        available = {0}
        n = int(input())
        (*a,) = map(int, input().split())
        cnt = 0
        for i in range(n):
            if i & 1:
                cnt += a[i]
            else:
                cnt -= a[i]
            if cnt in available:
                ans = 'YES'
                break
            available.add(cnt)
        print(ans)
main()

Solution (Python):
import sys
import os
if os.path.exists('input.txt'):
    sys.stdin = open('input.txt', 'r')
    sys.stdout = open('output.txt', 'w')

def strin():
    return sys.stdin.readline().strip()

def arrin():
    return list(map(int, sys.stdin.readline().split()))

def intin():
    return int(sys.stdin.readline())

def solve():
    n = intin()
    a = arrin()
    l = {0}
    s = 0
    m = 1
    for x in a:
        s += x * m
        m = -m
        l.add(s)
    print('Yes' if len(l) <= n else 'NO')
t = intin()
for i in range(t):
    solve()