zoukankan      html  css  js  c++  java
  • PAT甲题题解-1044. Shopping in Mars (25)-水题

    n,m
    然后给出n个数
    让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m
    并且按l的大小顺序输出对应区间。
    如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案。

    如果两层for循环l和r的话,会超时,实际上for循环一遍即可。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #define INF 0x3f3f3f3f
    using namespace std;
    
    const int maxn=100000+5;
    int n,m;
    int diamond[maxn];
    struct Ans{
        int i,j;
    };
    
    vector<Ans> ans;
    int main()
    {
        scanf("%d %d
    ",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&diamond[i]);
        int minlost=INF;
        Ans tmp;
        int sum=0;
        int start=1;
        for(int i=1;i<=n;i++){
            sum+=diamond[i];
    //printf("%d %d %d %d %d
    ",start,i,sum,sum-m,minlost);
            if(sum<m)
                continue;
            if(sum-m<=minlost){
                if(sum-m<minlost){
                    ans.clear();
                    minlost=sum-m;
                }
                tmp.i=start;
                tmp.j=i;
                ans.push_back(tmp);
            }
            if(sum>=m && start<i){
                sum-=diamond[i];
                i--;
                sum-=diamond[start];
                start++;
            }
        }
        for(int i=0;i<ans.size();i++){
            printf("%d-%d
    ",ans[i].i,ans[i].j);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    JavaScript解析顺序和变量作用域
    JS-BOM
    原生对象-Array
    JavaScript01
    css3动画
    scc的使用
    CSS3学习总结
    Js数组方法大全
    JavaScript判断变量是否为数组
    浏览器兼容性问题及解决方案
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6677802.html
Copyright © 2011-2022 走看看