最小的N个和 Codevs No.1245

2016-05-31 18:52:15

题目链接: 最小的N个和 Codevs No.1245

题目大意:

  给两个等长数列,各取一个数求和,找到最小的N组

解法:

  堆优化的大暴力

  直接枚举所有可能在最大堆中更新,删除最大组合

需要注意的地方:

  1.如果任何一个加数大于等于堆顶元素,break

  2.如果两者之和已经大于等于堆顶元素,break

 1 //最小的N个和 (Codevs No.1245)
 2 //堆(优先队列)
 3 #include<stdio.h>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int maxn=100010;
 8 priority_queue <int> q;
 9 int N;
10 int x[maxn];
11 int y[maxn];
12 int ans[maxn];
13 int main()
14 {
15     scanf("%d",&N);
16     for(int i=1;i<=N;i++)
17     {
18         scanf("%d",&x[i]);
19     }
20     for(int j=1;j<=N;j++)
21     {
22         scanf("%d",&y[j]);
23     }
24     sort(x+1,x+N+1);
25     sort(y+1,y+N+1);
26     for(int i=1;i<=N;i++)q.push(x[i]+y[i]);
27     for(int i=1;i<=N;i++)
28     {
29         if(x[i]>=q.top())break;
30         for(int j=1;j<=N;j++)
31         {
32             if(i==j)continue;
33             if(y[j]+x[i]>=q.top())break;
34             q.push(x[i]+y[j]);
35             q.pop();
36         }
37     }
38     for(int i=1;i<=N;i++)
39     {
40         ans[i]=q.top();
41         q.pop();
42     }
43     for(int i=N;i>=1;i--)
44     {
45         printf("%d ",ans[i]);
46     }
47     return 0;
48 }
时间: 2025-01-04 13:28:18

最小的N个和 Codevs No.1245的相关文章

地鼠游戏 Codevs No.1245

2016-05-31 18:22:32 题目链接: 地鼠游戏 Codevs No.1245 题目大意: 打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s打一个)打地鼠所得 解法: 贪心+堆优化 按时间倒着选,每次将当前时间结束的地鼠加入集合 每秒在最大堆中取最上端的点加入答案即可 需要注意的地方: 1.时间顺序一定要对,正着选是错的 1 //地鼠游戏 (Codevs No.1052) 2 //贪心 3 #include<stdio.h> 4 #i

最小的N个和(codevs 1245)

1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个. 输入描述 Input Description 第一行输入一个正整数N:第二行N个整数Ai 且Ai≤10^9:第三行N个整数Bi,且Bi≤10^9 输出描述 Output Description 输出仅一行,包

codevs 1245 最小的N个和

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个. 输入描述 Input Description 第一行输入一个正整数N:第二行N个整数Ai 且Ai≤10^9:第三行N个整数Bi,且Bi≤10^9 输出描述 Output Description 输出仅一行,包含 n 个整数,从小到大输出这 N个最小的和

求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

codevs 1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤5000)条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许是为了保护该地的旅游资源,Z小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车

[Codevs 1421]秋静叶&amp;秋穣子(最大-最小博弈)

题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的前提下,对方取得尽量少 设f[x][0]表示以x的子树的先手最优值,f[x][1]表示以x的子树的后手最优值,注意这里的先手.后手是相对而言的 那么树形DP 1.若x节点的深度为奇数,此时轮到A取数 f[x][0]=a[x]+f[k][1] f[x][1]=f[k][0] 其中k是x的儿子节点中ma

codevs 必做:堆:1245、2879 并查集:1069、1074、1073

1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个. 输入描述 Input Description 第一行输入一个正整数N:第二行N个整数Ai 且Ai≤10^9:第三行N个整数Bi,且Bi≤10^9 输出描述 Output Description 输出仅一行,包

codevs 2796 最小完全图

2796 最小完全图 http://codevs.cn/problem/2796/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 若一个图的每一对不同顶点都恰有一条边相连,则称为完全图. 最小生成树MST在Smart的指引下找到了你,希望你能帮它变成一个最小完全图(边权之和最小的完全图). 注意:必须保证这个最小生成树MST对于最后求出的最小完全图是唯一的. 输入描述 Input Description 第一行一个整数n,表示生成树的节点数. 接下来有n-

1245 最小的N个和

1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个. 输入描述 Input Description 第一行输入一个正整数N:第二行N个整数Ai 且Ai≤10^9:第三行N个整数Bi,且Bi≤10^9 输出描述 Output Description 输出仅一行,包含 n 个整数,从小

code vs 1245 最小的N个和

1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个. 输入描述 Input Description 第一行输入一个正整数N:第二行N个整数Ai 且Ai≤10^9:第三行N个整数Bi,且Bi≤10^9 输出描述 Output Description 输出仅一行,包含 n 个整数