PAT (Advanced Level) Practice - 1044 Shopping in Mars(25 分)

简介: PAT (Advanced Level) Practice - 1044 Shopping in Mars(25 分)

题目链接:点击打开链接

题目大意:找到价值正好等于 m 的子序列下标 “L-R”,若有多个,都输出;若一个也没有,则输出相差最小的(有多个,都输出)。

解题思路:差分前缀和 + 二分查找。


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;
const int maxn=1e5+10;
ll a[maxn], b[maxn];
unordered_map<ll,int> ump;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        b[0]=0; ump[0]=-1;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            b[i]+=a[i]+b[i-1];
            ump[b[i]]=i;
        }
//        for(int i=0;i<=n;i++) printf("%d ",b[i]); puts("");
        int f=1;
        for(int i=1;i<=n;i++)
        {
            ll idx=b[i]-m,l,r=i;
            if(idx>=0 && (ump[idx]>0 || ump[idx]==-1)) // 匹配到正好的前缀和
            {
                f=0;
                l=ump[idx]==-1?ump[idx]+2:ump[idx]+1;
                printf("%lld-%lld\n",l,r);
            }
        }
        if(f) // 没有匹配到正好的前缀和
        {
            ll mi=INT_MAX;
            for(int i=1;i<=n;i++) // 查找最小值
            {
                ll idx=b[i]-m,l,r=i;
                if(idx<0) continue;
                l=upper_bound(b,b+n+1,idx)-b;
                mi=min(b[r]-b[l-1],mi);
            }
            for(int i=1;i<=n;i++) // eq 最小值输出
            {
                ll idx=b[i]-m,l,r=i;
                if(idx<0) continue;
                l=upper_bound(b,b+n+1,idx)-b;
                if(mi==b[r]-b[l-1])
                    printf("%lld-%lld\n",l,r);
            }
        }
    }
    return 0;
}
目录
打赏
0
0
0
0
38
分享
相关文章
Android平台GB28181设备接入端PTZ对接详解
上一篇blog“Android平台GB28181设备接入模块之球机/云台控制探究”谈到,Android平台做国标GB28181设备接入端的时候,PTZ控制要不要处理?如果处理,难度大不大?
308 0
Spark Doris Connector设计方案
Spark Doris Connector 是Doris在0.12版本中推出的新功能。用户可以使用该功能,直接通过Spark对Doris中存储的数据进行读写,支持SQL、Dataframe、RDD等方式。从Doris角度看,将其数据引入Spark,可以使用Spark一系列丰富的生态产品,拓宽了产品的想象力,也使得Doris和其他数据源的联合查询成为可能。
1067 0
Spark Doris Connector设计方案
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
380 19
如何在页面中监听“不存在”的 DOM 节点
本文将介绍 MutationObserver 的基本原理、使用方法和应用场景,帮助读者更好地理解和应用这个灵活且强大的 API。
MongoDB——副本集与分片
 MongoDB复制是将数据同步在多个服务器的过程。
1014 0
MongoDB——副本集与分片
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
BookStack 详解及 Docker-Compose 部署
BookStack 是一款用于创建文档和文档管理的开源平台。它提供了一个直观且功能丰富的界面,可用于组织和管理各种文档,包括文档编写、编辑和共享。
633 1
BookStack 详解及 Docker-Compose 部署
软件测试案例 | 某教务管理平台系统的系统测试总结报告
集成测试通过之后,各个模块已经被组装成了一个完整的软件包,这时就需要进行系统测试了。传统的系统测试指的是通过集成测试的软件系统,作为计算机系统的一个重要组成部分,其将与计算机硬件、外部设备、支撑软件等其他系统元素组合在一起进行测试,目的在于通过与系统需求定义作比较,发现软件与需求规格不符合或者相矛盾的地方,从而提出更加完善的解决方案。这里特别提出需要软硬件支撑的虚拟现实(Virtual Reality,VR)项目测试的特殊性。
798 0
软件测试案例 | 某教务管理平台系统的系统测试总结报告
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问