卿学姐与魔法(优先队列)
Posted 余生漫漫浪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卿学姐与魔法(优先队列)相关的知识,希望对你有一定的参考价值。
个人心得:思路很简单,不过就是会超时,而且直接用数组的话肯定不够大。
所以就用优先队列,让里面只装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元素
1≤N≤1000001≤N≤100000
1≤A[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 |
以上是关于卿学姐与魔法(优先队列)的主要内容,如果未能解决你的问题,请参考以下文章