牛客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--)不一样的结果,有时候相同的代码居然有不同结果,还是不搞这些花里胡哨的玄学问题了,差不多就行了。