zoukankan      html  css  js  c++  java
  • 【PAT甲级】1044 Shopping in Mars (25 分)(前缀和,双指针)

    题意:

    输入一个正整数N和M(N<=1e5,M<=1e8),接下来输入N个正整数(<=1e3),按照升序输出"i-j",i~j的和等于M或者是最小的大于M的数段。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[100007];
     5 int sum[100007];
     6 vector<pair<int,int> >ans;
     7 int main(){
     8     ios::sync_with_stdio(false);
     9     cin.tie(NULL);
    10     cout.tie(NULL);
    11     int n,m;
    12     cin>>n>>m;
    13     for(int i=1;i<=n;++i){
    14         cin>>a[i];
    15         sum[i]=sum[i-1]+a[i];
    16     }
    17     int l=0,t=0,mn=1e9;
    18     for(int i=0;i<=n;++i){
    19         t-=a[i];
    20         while(t<m&&l<=n)
    21             t+=a[l++];
    22         if(t>=m&&t<mn){
    23             mn=t;
    24             ans.clear();
    25             ans.push_back({i+1,l-1});
    26         }
    27         else if(t==mn)
    28             ans.push_back({i+1,l-1});
    29     }
    30     cout<<ans[0].first<<"-"<<ans[0].second;
    31     for(int i=1;i<ans.size();++i)
    32         cout<<"
    "<<ans[i].first<<"-"<<ans[i].second;
    33     return 0;
    34 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11605695.html
Copyright © 2011-2022 走看看