P1571 眼红的Medusa 题解
P1571 眼紅的Medusa 題解
- 題目
- 鏈接
- 字面描述
- 題目描述
- 輸入格式
- 輸出格式
- 樣例 #1
- 樣例輸入 #1
- 樣例輸出 #1
- 提示
- 思路
- 代碼實現
題目
鏈接
https://www.luogu.com.cn/problem/P1571
字面描述
題目描述
雖然 Miss Medusa 到了北京,領了科技創新獎,但是她還是覺得不滿意。原因是:他發現很多人都和她一樣獲了科技創新獎,特別是其中的某些人,還獲得了另一個獎項——特殊貢獻獎。而越多的人獲得了兩個獎項,Miss Medusa就會越眼紅。于是她決定統計有哪些人獲得了兩個獎項,來知道自己有多眼紅。
輸入格式
第一行兩個整數 n,mn, mn,m,表示有 nnn 個人獲得科技創新獎,mmm 個人獲得特殊貢獻獎。
第二行 nnn 個正整數,表示獲得科技創新獎的人的編號。
第三行 mmm 個正整數,表示獲得特殊貢獻獎的人的編號。
輸出格式
輸出一行,為獲得兩個獎項的人的編號,按在科技創新獎獲獎名單中的先后次序輸出。
樣例 #1
樣例輸入 #1
4 3 2 15 6 8 8 9 2樣例輸出 #1
2 8提示
對于 60%60\%60% 的數據,0≤n,m≤10000 \leq n, m \leq 10000≤n,m≤1000,獲得獎項的人的編號 <2×109\lt 2 \times 10^9<2×109;
對于 100%100\%100% 的數據,0≤n,m≤1050 \leq n, m \leq 10^50≤n,m≤105,獲得獎項的人的編號 <2×109\lt 2 \times 10^9<2×109。
輸入數據保證第二行任意兩個數不同,第三行任意兩個數不同。
思路
將兩個數組分別從小到大排序;
在兩個指針分別指向a,b,數組的進度下標;
若當前a數組等于 b數組放入帶輸出序列
a<b a的指針++
否則 b的指針++
代碼實現
#include<bits/stdc++.h> using namespace std;const int maxn=1e5+10; int n,m,cnt; int b[maxn]; struct node{int l,op; }a[maxn]; struct edge{int s,o; }ans[maxn]; inline bool cmp1(node u,node v){return u.l<v.l;} inline bool cmp2(edge u,edge v){return u.o<v.o;} int main(){scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%d",&a[i].l);a[i].op=i;}for(int i=0;i<m;i++)scanf("%d",&b[i]);sort(a,a+n,cmp1);sort(b,b+m);int x=1,y=1;while(x<=n&&y<=m){if(a[x-1].l==b[y-1]){ans[++cnt].s=a[x-1].l;ans[cnt].o=a[x-1].op;x++,y++;}else if(a[x-1].l<b[y-1])x++;else y++;//2 6 8 15//2 8 9}sort(ans+1,ans+cnt+1,cmp2);for(int i=1;i<=cnt;i++)printf("%d ",ans[i].s);return 0; }總結
以上是生活随笔為你收集整理的P1571 眼红的Medusa 题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国志手游挂机脚本 三国志辅助玩法介绍
- 下一篇: httpclient对象请求时报错jav