牛客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\n");
        else
            printf("NO\n");
    }
    return 0;
}

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

猜你喜欢

转载自www.cnblogs.com/shoulinniao/p/10924741.html