1. 程式人生 > >卿學姐與魔法(優先隊列)

卿學姐與魔法(優先隊列)

data cnblogs ace lns 學習 span sam emp frame

個人心得:思路很簡單,不過就是會超時,而且直接用數組的話肯定不夠大。

所以就用優先隊列,讓裏面只裝N個數就好了,然後再次添加時進行比較,比他小就放進去。

不過這樣超時,所以先將A,B排序,然後只要比隊首大就break就可以過了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<queue>
 6 #include<algorithm>
 7 using namespace std;
8 int a[100005]; 9 int b[100005]; 10 int main() 11 { 12 int n; 13 scanf("%d",&n); 14 priority_queue<int >pq; 15 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 16 for(int i=1;i<=n;i++) scanf("%d",&b[i]); 17 sort(a+1,a+n+1); 18 sort(b+1,b+n+1); 19 for(int i=1
;i<=n;i++) 20 for(int j=1;j<=n;j++) 21 { 22 int t=a[i]+b[j]; 23 if(pq.size()==n&&t>pq.top()) 24 break; 25 if(pq.size()==n) 26 { 27 int x=pq.top(); 28 if(t<x) 29 { 30 pq.pop();
31 pq.push(t); 32 } 33 } 34 else 35 pq.push(t); 36 37 } 38 int sum[100005]; 39 int t=n; 40 while(!pq.empty()) 41 { 42 int x=pq.top(); 43 sum[t--]=x; 44 pq.pop(); 45 } 46 for(int i=1;i<=n;i++) 47 printf("%d\n",sum[i]); 48 return 0; 49 50 }

“你的膜法也救不了你

在去拯救公主的道路上,卿學姐披荊斬棘,刀刃早已銹跡斑斑。

一日卿學姐正在為武器的問題發愁,碰到了正在賞樹的天行廖。

天行廖嘴角微揚,似乎看穿了卿學姐的心思,故意在此等待。

“少年,你渴望掌握雷電的力量嗎?”天行廖如是問道。

已經差不多是條鹹魚的卿學姐欣然答應了。於是卿學姐開始跟隨魔法大師天行廖學習魔法的力量。

剛入門的卿學姐發現,每個魔法都是由兩種基本元素構成的,A元素和B元素。

而每個魔法的魔力是合成這個魔法的A元素和B元素的大小的和。

例如一個大小為3的A元素和一個大小為6的B元素,能構成一個魔力為9的魔法。

現在卿學姐收集了NN個A元素和NN個B元素。

敏銳的卿學姐立刻發現他能組合出N?NN?N種魔法。

謙虛的卿學姐並不希望自己太跳,所以他準備將這N?NN?N種魔法中的最小的NN種展示給天行廖檢查。

現在卿學姐想知道,這N?NN?N種魔法中最小的NN種是什麽。

當然,得從小到大輸出哦~

Input

第一行一個整數NN

接下來一行有NN個數,表示NN個A元素

接下來一行有NN個數,表示NN個B元素

1N1000001≤N≤100000

1A[i],B[i]10000000001≤A[i],B[i]≤1000000000

Output

輸出NN行,每行一個整數

代表N?NN?N種魔法中最小的NN個

Sample input and output

Sample Input

Sample Output

5
1 3 2 4 5 
6 3 4 1 7
2
3
4
4
5

卿學姐與魔法(優先隊列)