【codeforce】#682 B

Valerii Against Everyone#

您将得到一个长度为n的数组b。让我们定义另一个数组a,其长度也为n,其中ai = 2^bi(1≤i≤n)。

Valerii说,每两个不相交的子数组具有不同的元素和。您想确定他是否错了。更正式地讲,您需要确定是否存在满足以下条件的四个整数l1,r1,l2,r2:

1≤l1≤r1<l2≤r2≤n;
al1 + al1 + 1 + ... + ar1-1 + ar1 = al2 + al2 + 1 + ... + ar2-1 + ar2。
如果存在这四个整数,则将证明Valerii错误。它们存在吗?

如果可以通过从开头删除几个(可能为零或全部)元素并从结尾删除几个(可能为零或全部)元素而从d获得c,则数组c是数组d的子数组。

输入值
每个测试包含多个测试用例。第一行包含测试用例的数量t(1≤t≤100)。测试用例的说明如下。

每个测试用例的第一行包含一个整数n(2≤n≤1000)。

每个测试用例的第二行包含n个整数b1,b2,…,bn(0≤bi≤109)。

输出量
对于每个测试用例,如果在中存在两个不相交的子数组,它们的总和相同,则在单独的行上输出YES。否则,在单独的行上输出NO。

另外,请注意,每个字母都可以。

Example

input

2
6
4 3 0 1 2 0
2
2 5

output

YES
NO

Note

In the first case, a=[16,8,1,2,4,1]a=[16,8,1,2,4,1]. Choosing l1=1l1=1, r1=1r1=1, l2=2l2=2 and r2=6r2=6 works because 16=(8+1+2+4+1)16=(8+1+2+4+1).

In the second case, you can verify that there is no way to select to such subarrays.


分析#

定义了数组bi和数组ai;

数组ai=2^bi;

ai中存在两个不相交的子数组,它们的总和相同,1,2,4,8,16,32,64;观察之后可以发现,(1+2+4)!=8,要满足题目要求,必须严存在2个相同的元素,例如2个8;题目就可以转化为判断数组中是否存在2个相同的元素,如果存在,则输出YES,如果不存在,则输出NO;

AC代码#

#include<bits/stdc++.h>
using namespace std;
int n;
int t;
map<int,int>mp;

int main()
{
   cin>>t;
   while(t--)
   {
      cin>>n;
      mp.clear();
      int flag=0;
      for(int i=1;i<=n;i++)
      {
         int a;
         cin>>a;
         if(mp[a]) flag=1;
         mp[a]=1;
      }
      if(flag) cout<<"YES"<<endl;
      else cout<<"NO"<<endl;
   }
   return 0;
 } 

作者:tazimi

出处:https://www.cnblogs.com/tazimi/p/13997934.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   tazimi  阅读(127)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示