【CDOJ 1329】卿学姐与魔法

来源:互联网 发布:好用的面霜干皮 知乎 编辑:程序博客网 时间:2024/06/02 09:29

http://acm.uestc.edu.cn/#/problem/show/1329
先把A[i]+B[0]拖进一个优先队列,然后每次取出最小值A[i]+B[k],同时把A[i]+B[k+1]扔进去,然后直到取出n个数。

#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>#include <cstring>#include <queue>#include <stack>#include <map>#include <vector>#include <cstdlib>#include <string>#define PI acos((double)-1)#define E exp(double(1))using namespace std;int a[100000],b[100000];int c[100000];int main (void){    int n;    cin>>n;    for(int i=1;i<=n;i++)        scanf("%d",&a[i]);    sort(a+1,a+n+1);    for(int i=1;i<=n;i++)        scanf("%d",&b[i]);    sort(b+1,b+n+1);    priority_queue<pair<int,int> >s;    for(int i=1;i<=n;i++)        s.push(make_pair(-(a[i]+b[1]),1));    for(int i=1;i<=n;i++)    {        pair<int,int> temp=s.top();s.pop();        c[i]=-temp.first;        int k=temp.second;        if(temp.second<n)s.push(make_pair(-(-temp.first-b[k]+b[k+1]),k+1));    }    for(int i=1;i<=n;i++)        printf("%d\n",c[i]);    return 0;}

再贴一份代码(哦,顺便这道题可以验证cin cout 和scanf printf的快慢~ 嗯,而且是关闭同步优化过的cin cout)
(换成关闭同步的cin cout在T11挂掉)

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;int n;typedef pair<int,int> pii;priority_queue<pii , vector<pii>, greater<pii> > s;#define maxn 100010int a[maxn],b[maxn];int ans[maxn];int main(){//  ios::sync_with_stdio(false);//  cin>>n;    scanf("%d",&n);    for(int i=1;i<=n;i++)scanf("%d",&a[i]);//cin>>a[i];    for(int i=1;i<=n;i++)scanf("%d",&b[i]);//cin>>b[i];    sort(a+1,a+1+n);    sort(b+1,b+1+n);    for(int i=1;i<=n;i++)s.push(make_pair(a[i]+b[1],1));    int k = 0;    for(int i=1;i<=n;i++)    {        ans[i] = s.top().first;        k = s.top().second;        s.pop();        if(k<n)s.push(make_pair(ans[i]-b[k]+b[k+1],k+1));           }    for(int i=1;i<=n;i++)printf("%d\n",ans[i]);//cout<<ans[i]<<endl;    return 0;}
1 0
原创粉丝点击