当前位置:首页 > 编程笔记 > 正文
已解决

PTA 甲级 1044 Shopping in Mars

来自网友在路上 169869提问 提问时间:2023-09-19 03:08:51阅读次数: 69

最佳答案 问答题库698位专家为你答疑解惑

题目链接

思路:前缀和+滑动窗口

#include<bits/stdc++.h>
#define MAXN 100010
using namespace std;
int a[MAXN];int main(){int n,m;cin>>n>>m;//n数量 m金额for(int i=1;i<=n;i++){int t;cin>>t;a[i]=a[i-1]+t;//前缀和}vector<pair<int,int>> ans;int i=1,j=1;//滑动窗口while(i<=j&&j<=n){// printf("%d-%d:%d\n",i,j,a[j]-a[i-1]);if(a[j]-a[i-1]==m){ans.push_back(make_pair(i,j));i++,j++;}else if(a[j]-a[i-1]>m) i++;else j++;if(i>j)j++;}if(ans.size()==0){//存储大于m的最小整数int minNum=8989898;i=1,j=1;while(i<=j&&j<=n){// printf("%d-%d:%d\n",i,j,a[j]-a[i-1]);if(a[j]-a[i-1]>m&&a[j]-a[i-1]<minNum){minNum=a[j]-a[i-1];ans.clear();ans.push_back(make_pair(i,j));i++;}else if(a[j]-a[i-1]==minNum){ans.push_back(make_pair(i,j));i++;}else if(a[j]-a[i-1]>minNum) i++;else j++;if(i>j)j++;}}for(auto &[x,y]:ans){cout<<x<<"-"<<y<<endl;}return 0;
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"PTA 甲级 1044 Shopping in Mars":http://eshow365.cn/6-9065-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!