P1571 眼红的Medusa
Posted pureayu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于P1571 眼红的Medusa的主要内容,如果未能解决你的问题,请参考以下文章