• 牛客OI周赛10-普及组-A眼花缭乱的街市-(加速+二分)


    https://ac.nowcoder.com/acm/contest/901/A

    很简单的一道题,全场只有20+AC,卡时间。新学了cin加速语法和数组二分查找的函数调用。

    知道有个读写挂,可以加速,一直懒得去看,今天终于栽在时间上了。

    ios::sync_with_stdio(0);

    cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句ios::sync_with_stdio(false);可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几,本题尝试后,感觉加速后的cin比scanf还快。

    经过多次尝试:

    1.用map和set必T,无论输入输出

    建立在sort和binary_search基础上

    2.输入用加速cin和printf能过,用加速cin和cout不能过(死都过不了)

    3.用普通的scanf和printf不能过

    binary_search:查找某个元素是否出现。

    函数模板binary_search(arr[],arr[]+size,x)

    比如if( binary_search(a,a+n,x) ),x表示要查找的元素,从下标为0查到下标为n-1

    找得到返回真,否则返回假,一般用于if判断

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    #include<string>
    #include<vector>
    #include<iostream>
    #include<set>
    #include<cstring>
    #include<queue>
    #include<map>
    #define inf 0x3f3f3f3f
    #define ll long long
    using namespace std;
    
    ll a[1000086];
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
        int n,m;
        cin>>n>>m;
        ll x;
        for(int i=0;i<n;i++)
            cin>>a[i];
        sort(a,a+n);
        while(m--)
        {
            cin>>x;
            if( binary_search(a,a+n,x) )
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }

    牛客网测了一晚上,有时候for(int i=0;i<m;i++)和while(m--)不一样的结果,有时候相同的代码居然有不同结果,还是不搞这些花里胡哨的玄学问题了,差不多就行了。

  • 相关阅读:
    C++ primer 简读
    C++函数及类方法(待补充)
    C++参数传递-复制和引用
    c++动态分配内存
    C++内存与指针
    c++循环
    C++容器vector及迭代器对象iterator
    c++字符类型一些知识点
    CNN中卷积运算转化成矩阵乘法的实现——img2col+GEMM大矩阵乘法
    046 LeetCode go
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10924741.html
Copyright © 2020-2023  润新知