dotcpp0740312


私信TA

用户名:dotcpp0740312

访问量:561

签 名:

等  级
排  名 4743
经  验 1583
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

为了防止超时,使用二分
排序二分即可
注意事项:

注意每组数据后要输出空行

YES和NO要大写

首先要判断数据是否大于a[n]或小于a[1]

l < r-1

否则会死循环

要判断a[l]和a[r]


参考代码:


#include <bits/stdc++.h>
using namespace std;
int a[1001];
int main()
{
    int n,m,key;
    int l,r;
    while(1)
    {
        memset(a,0,sizeof(a));
        cin >> n;
        if(n == -1) break;
        for(int i = 1; i <= n; i++)
            cin >> a[i];
        sort(a+1,a+n+1);
        cin >> m;
        for(int i = 1; i <= m; i++)
        {
            cin >> key;
            l = 1; r = n;
            if(a[1] > key || a[n] < key)
            {
                cout << "NO\n";
                continue;
            }
            while(l < r-1)
            {
                if(a[(l+r)/2] < key) l = (l+r)/2;
                else r = (l+r)/2;
            }
            if(a[l] == key) cout << "YES\n";
            else if(a[r] == key) cout << "YES\n";
            else cout << "NO\n";
        }
        cout << endl;
    }
        return 0;
}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区