60分,超时求调

P1571 眼红的Medusa

$ O(nm)的时间复杂度肯定会超时呀 $
by imzfx_Square @ 2024-02-03 10:38:18


你可以把a改成统计数组,每输入一个就统计,输入b的时候再去判断有没有在a里面出现过 @[ycy1124](/user/1199534)
by imzfx_Square @ 2024-02-03 10:40:16


加了一点小小的优化后还是60分 ```cpp #include<bits/stdc++.h> using namespace std; int a[100001],b[100001]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=m;i++) { scanf("%d",&b[i]); } sort(b+1,b+m+1); for(int i=1;i<=n;i++) { for(int k=1;k<=m;k++) { if(a[i]==b[k]) { printf("%d ",a[i]); } else if(a[i]<b[k]) { break; } } } return 0; } ``````
by ycy1124 @ 2024-02-03 10:42:18


@[imzfx](/user/936183) 统计数组是啥啊
by ycy1124 @ 2024-02-03 10:43:12


本人刚学c++半个学期,啥也不会
by ycy1124 @ 2024-02-03 10:44:04


这个代码你看得懂吗? ```c #include<bits/stdc++.h> using namespace std; int n,m; map<int,bool> v; int a[101000]; int b[101000]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=m;i++){ cin>>b[i]; v[b[i]]=true; } for(int i=1;i<=n;i++){ if(v[a[i]]){ cout<<a[i]<<" "; } } return 0; } ```
by timmyliao @ 2024-02-03 10:48:45


@[timmyliao](/user/1095093) 我觉得他看不懂 @[ycy1124](/user/1199534)
by __Rickysun__ @ 2024-02-03 10:50:15


@[ycy1124](/user/1199534) 就是定义一个数组,用它去统计哪些数出现过(不然这10^5肯定会超时,你学过map吗?)
by __Rickysun__ @ 2024-02-03 10:51:19


@[ycy1124](/user/1199534) 或者你用二分也可以,OK?~~别告诉我你二分页没学过~~
by __Rickysun__ @ 2024-02-03 10:52:31


@[timmyliao](/user/1095093) $map$ 是啥 @[Rickysun](/user/824205) 二分我明天学
by ycy1124 @ 2024-02-03 10:53:49


| 下一页