Find interval

Find interval
比赛题目
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB

描述

 

给你一个数组 a,你可以通过数组a的到一个数组b 其中转换规则是 b[i] = pow(2,a[i]); 现在你是否可以找到4个数 L1,R1,L2,R2,其中L1<=R1 < L2<=R2;问在数组 b 中是否存在区间L1到R1的和等于L2到R2区间的和,如果存在请输出 "YES"否则输出 “NO” ,注意:不加引号输出。

 

输入描述

 

第一行输入一个 T(1<=T<=1000)表示T组样例

接下来的T组样例中,第一行输入一个 n(1<=n<=1000)

第二行输入 a[0],a[1]…a[n];(保证每个 2的a[i]次方在长整型范围内)。

 

输出描述

 

输出 T 行每行表示一个答案(“YES”or “NO”)。

 

用例输入 1 

2
6
4 3 0 1 2 0
2
2 5

用例输出 1 

YES
NO

提示

 

第一个样例中的数组b为[16,8,1,2,4,1] L1选择 1,R1选择 1,L2选择 2 ,R2选择6 因为: 16 = 8+1+2+4+1.

第二组样例 找不出这样的数组。

题目:

观察就知道这个就是让你求2的幂的和,使得他们相等,对于这种,其实我们要使他们相等,必然有一对相等的Bi解,这样使得左右两边相等。,就可以转换为这个数组中有没有两个相同的元素。

AC:

复制代码
#include<bits/stdc++.h>
using namespace std;
string str;
int main(){
    int t;
    cin>>t;
        while(t--){
            set<int>st;
            int n;
            cin>>n;
            for(int i=0;i<n;i++){
                int x;
                cin>>x;
                st.insert(x);
            }
            if(st.size()==n)cout<<"NO"<<endl;
            else cout<<"YES"<<endl;
    }
    return 0;
}
复制代码

 

 

posted @   JerryTang菜菜  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示