PAT (Advanced Level) Practice - 1029 Median(25 分)

简介: PAT (Advanced Level) Practice - 1029 Median(25 分)

题目链接:点击打开链接

题目大意:两个序列合并,并输出合并后的中位数。

解题思路:


long int 数据(超过 INT_MAX)就默认为 INT_MAX,根据测试用例,最终答案不会是 long long 类型,否则就报“段错误”了,因为用的是优先队列,弹出。

当插入的个数超过中间个数值时,可以做弹出操作,最小的弹出。

注意:有可能第1序列个数很小,第2序列个数很大;也有可能反过来。

内存超限卡两种情况:i、所有数据存完;ii、数据类型太大。



MLE 代码(15分,最后一个点 MLE)

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
const int maxn=4*1e5+10;
int a[maxn];
int main()
{
    int n,l=0; scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[l++]);
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[l++]);
    sort(a,a+l);
    printf("%d\n",a[(l-1)/2]);
    return 0;
}

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
struct cmp
{
    bool operator()(int a,int b)
    {
        return a>b;
    }
};
priority_queue<int,vector<int>,cmp> pq;
int main()
{
    int n,mid,ans=0,sum=0,rs,st; scanf("%d",&n);
    ll a;
    ans=sum=n;
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a);
        if(a>INT_MAX) a=INT_MAX;
        pq.push(a);
    }
    scanf("%d",&n);
    sum+=n;
    mid=(sum-1)/2;
    st=sum-mid;
    while(ans>st)
    {
        ans--;
        pq.pop();
    }
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a);
        if(a>INT_MAX) a=INT_MAX;
        pq.push(a);
        ans++;
        if(ans>st) pq.pop();
    }
    printf("%d\n",pq.top());
    return 0;
}
目录
相关文章
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
534 1
|
数据可视化 数据挖掘
【因果推断】Day01- 实用计量方法图解与概述
【因果推断】Day01- 实用计量方法图解与概述
445 2
|
资源调度 Kubernetes 应用服务中间件
Kubernetes Scheduler Framework 扩展: 2. Binpack
# 前言 ## 为什么需要Binpack功能? Kubernetes默认开启的资源调度策略是`LeastRequestedPriority`,消耗的资源最少的节点得分最高,优先被调度。这样的资源选择情况有可能导致较多的资源碎片,如下图所示,两个节点各剩余1GPU的资源,导致申请2GPU的作业无法调度,导致整体资源使用率下降。 如果使用的资源调度策略是Binpack,优先将节点
2071 0
|
监控 安全 Linux
在Linux中,如何管理SSL/TLS证书?
在Linux中,如何管理SSL/TLS证书?
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
367 0
|
算法 Java 调度
【多线程面试题二十】、 如何实现互斥锁(mutex)?
这篇文章讨论了在Java中实现互斥锁(mutex)的两种方式:使用`synchronized`关键字进行块结构同步,以及使用`java.util.concurrent.locks.Lock`接口进行非块结构同步,后者提供了更灵活的同步机制和扩展性。
|
存储 SQL 关系型数据库
PolarDB-X 存储引擎核心技术 | Lizard 多级闪回
本文介绍了数据库闪回技术,这是一种允许用户恢复到过去某个时间点状态的功能,无需依赖传统备份。闪回技术在误操作修复、数据恢复演练、问题诊断及合规审计等场景下尤为重要。
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
345 0
|
前端开发 Java API
Java并发基础:CompletableFuture全面解析
CompletableFuture类使得并发任务的处理变得简单而高效,通过简洁的API,开发者能轻松创建、组合和链式调用异步操作,无需关心底层线程管理,这不仅提升了程序的响应速度,还优化了资源利用率,让复杂的并发逻辑变得易于掌控。
339 1
Java并发基础:CompletableFuture全面解析