• 【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;
     } 
    
  • 相关阅读:
    Reverse Words in a String II -- LeetCode
    计算两点间的距离,hdu-2001
    A + B Problem,hdu-1000
    ASCII码排序,hdu-2000
    定义#define
    break语句的使用
    判断一个数是否为素数
    用下面公式求π:
    Sum Problem-hdu-1001
    正三角形的外接圆面积,nyoj-274
  • 原文地址:https://www.cnblogs.com/tazimi/p/13997934.html
Copyright © 2020-2023  润新知