zoukankan      html  css  js  c++  java
  • P1571 眼红的Medusa

     第一眼看到这道题就是想排序一下然后接着查找就行了,时间复杂度为O(n^2),

    但当看到题目给的数据范围时便发现这种做法非超时不可,于是便要对查找进行优化,进而想到二分查找

    时间复杂度为O(logN),很符合题目的潜规则 要求。

    题目有个小坑:输出顺序要求是科技进步奖的输入顺序,因此不能对科技排序,但要对特殊贡献进行排序。

    然后进行二分查找。

    还有一个点需要注意的是题目的数据范围很大,数据要开大一点。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 long long a[200010], b[200010];
     6 int n, m;
     7 bool yes(long long  temp){
     8     long long l = 1, r = m;
     9     while(l <= r){
    10         long long  mid = l + (r - l) / 2;
    11         if(temp == b[mid])
    12             return true;
    13         else if(temp < b[mid])
    14             r = mid - 1;
    15         else
    16             l = mid + 1;
    17     }
    18     return false;
    19 }
    20 int main(){
    21     cin >> n >> m;
    22     for(int i = 1; i <= n; i ++)
    23         scanf("%lld",&a[i]);
    24     for(int i = 1; i <= m; i ++)
    25         scanf("%lld",&b[i]);
    26     sort(b + 1, b + m + 1);
    27     for(int i = 1; i <= n; i ++){
    28         if(yes(a[i]))
    29             cout << a[i] << ' '; 
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    代码操作
    购物车
    利息计算器
    生成海报
    知识库
    JavaScript处理字符串--参照W3C
    C#输入排序-冒泡
    enum举例
    C# 表达式计算器----数据结构
    C# 测试单词的完美度
  • 原文地址:https://www.cnblogs.com/pureayu/p/12530814.html
Copyright © 2011-2022 走看看