手机如何建免费网站,祖庙网站开发,网站备案信息传,微信微商软件虽然是div4#xff0c;但是打的稀烂#xff0c;哭死。
E题看了jiangly的题解豁然开朗#xff0c;原来思路这么简单。被自己蠢到了#xff0c;我傻傻的用前缀和#xff0c;两层for枚举区间#xff0c;不出意外TLE了#xff0c;写的那一刻就知道要超时#xff0c;但是没…虽然是div4但是打的稀烂哭死。
E题看了jiangly的题解豁然开朗原来思路这么简单。被自己蠢到了我傻傻的用前缀和两层for枚举区间不出意外TLE了写的那一刻就知道要超时但是没思路了。下面是讲解
想一下一段区间下标为奇数的元素和和下标为偶数的元素和相等意味着什么是不是意味着奇数和减去偶数和0。 可以发现当l4r5的时候下标为奇数的元素和时等于下标为偶数的元素和他们对应的元素加和自然就为0了所以7这个元素出现了两次相当于7加上了下标为奇数的和又减去下标为偶数的和所得结果不变说明这段区间符合我们的要求。问题就转化为了反转后的元素的前缀和是否会出现相同的元素出现了说明有符合条件的区间。
下面是jiangly大佬的代码
using i64 long long;void solve() {int n;std::cin n;std::vectori64 s(n 1);std::seti64 set{0LL};for (int i 0; i n; i) {int a;std::cin a;s[i 1] s[i] (i % 2 ? 1 : -1) * a;set.insert(s[i 1]);}if (set.size() ! n 1) {std::cout YES\n;}else {std::cout NO\n;}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin t;while (t--) {solve();}return 0;
}