4 3 1 2 3 4 3 6 5 4
9 9 10
郑大第六届校赛
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstdio>
#define MAX 100005
using namespace std;
int A[MAX],B[MAX];
bool comp(const int &a,const int &b){return a>b;
}
struct cmp{bool operator()(const int &a,const int &b){//优先队列内元素由小到大排列 return a>b;}
};
int main(){int N,K;while(cin>>N>>K){priority_queue<int,vector<int>,cmp>pq;for(int i=0;i<N;i++){//cin>>A[i];scanf("%d",&A[i]);}for(int i=0;i<N;i++){//cin>>B[i];scanf("%d",&B[i]);}//程序主要思想 // 将A,B,数组由大到小排列,让A中最大的数从B中加K个数,得到的这K个数可能为 最大的K个数//然后再让A第二大的数从B中加数,若有一个小于A[i] +B[j]小于pq.top(),说明此时B中余下的数加A[i]都不会大于 pq.top(),break//若发现有大于pq.top()的数,入队 sort(A,A+N,comp),sort(B,B+N,comp);for(int i=0;i<K;i++){pq.push(A[0]+B[i]);} for(int i=1;i<N;i++){for(int j=0;j<N;j++){int num=A[i]+B[j];if(num&p()){break;}else {pq.pop();pq.push(num);}}}while(K--){printf("%d ",pq.top());pq.pop();}}
}
sort中按comp的中大小顺序排列数组即在comp中return a>b 则数组按由大到小排列
而priority_queue中
struct comp{
bool operator()(const int &a,const int &b){
//优先队列内元素由小到大排列 ,若由大到小排列则为<
return a>b;
}
};
与sort的comp相反
本文发布于:2024-01-30 22:25:20,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662472123262.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |