• PAT-1044. Shopping in Mars (25)


    这道题木意思是给你一个连续的序列,要求找出其中连续和为给定值的一段序列,如果不存在这样的序列,那么就输出值大于给定值且最接近的这样值的一个序列。

    题目数据量是10^5,如果用N*2复杂度肯定会超时,所以我采用的是On算法。但是在求和少于给定值的过程中所需的步骤不确定。总体效果还算不错,最大时间是39ms。

    自己挖了一坑。。。

    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    using namespace std;
    
    struct Pair
    {
    int x;
    int y;
    Pair(int x,int y)
    {
    this->x=x;
    this->y=y;
    }
    };
    vector<Pair> v;
    int main()
    {
    int n,m;
    int start=1;
    int data[100100];
    int sum=0;
    freopen("1044.txt","r",stdin);
    int dis=0xffffffff>>1;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    bool flag=false;
    for(int i=1;i<=n;i++)
    {
    scanf("%d",&data[i]);
    sum+=data[i];
    while(sum>m)
    {
    if(sum>m&&sum-m<dis)
    {
    dis=sum-m;
    v.clear();
    v.push_back(Pair(start,i));
    }
    else if(sum>m&&sum-m==dis)
    {
    v.push_back(Pair(start,i));
    }
    sum-=data[start];  //先进行减法,然后再判断,导致两个数据不正确。
    start=start+1;
    }
    if(sum==m)
    {
    printf("%d-%d
    ",start,i);
    sum-=data[start];
    start=start+1;
    flag=true;
    }
    }
    if(!flag)
    {
    for(int i=0;i<v.size();i++)
    {
    printf("%d-%d
    ",v[i].x,v[i].y);
    }
    }
    }
    return 0;
    }
  • 相关阅读:
    CAP 理论笔记
    介绍 GOMEZ
    CDN资料下载(1) 20091223
    About网宿CDN
    [笔记] Darwin Streaming server 的 Task 类
    手把手教你写“隐藏图标托盘程序”
    WIN7下使用OpenSCManger和OpenService函数的注意
    oracle按月、日、时分组查询数据,为空的数据补零
    搜索引擎学习
    JSONP与JSON
  • 原文地址:https://www.cnblogs.com/championlai/p/4099330.html
Copyright © 2020-2023  润新知