zoukankan      html  css  js  c++  java
  • 杭电1003题

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int max_i=0,min_i=0,ma=0;
    void max_son(int a[],int len){
        int k,k1,sum=0,i1=0,i2=0,flag=0;
        max_i=0;
        min_i=0;
        ma=k=-10000;
        for(int i=0;i<len;i++){
            if(a[i]>k){
                k=a[i];
                k1=i;
            }
            sum+=a[i];
            if(sum<0){
                sum=0;
                i1=i+1;
                }
            if(sum>ma){
                min_i=i1;
                max_i=i;
                ma=sum;
            }
        }
        if(ma==0&&min_i==1&&max_i==0){
            ma=k;
            min_i=max_i=k1;
        }
    }
    int main(void)
    {
        int m,n,a[100000]={0};
        while(cin>>n){
            int x=1;
            while(x<=n){
                scanf("%d",&m);
                for(int i=0;i<m;i++)
                    scanf("%d",&a[i]);
                max_son(a,m);
                printf("Case %d:
    %d %d %d
    ",x,ma,++min_i,++max_i);
                if(x!=n) printf("
    ");
                x++;
        }
        }
        return 0;
        }

    首先遇到的一个问题是TLE 因为我用了c++的标准输入流,对于这个题目它给定的数组大小在0-100000  这意味着要输入很多数 在时间上用c的输入方法更为合适;

    还一个问题是没有考虑当全为负数的情况。

    还一点便是题目要求每组数据间隔一行,但要注意最后一行不要不能多隔一个

    整个算法的思路是:每个数相加直到和sum<0,重新更改虚最小下标为前一位,且sum=0;期间若sum>前一个和max则将最小下标设为虚下表,最大下表设置为当前下标;

  • 相关阅读:
    图表显示磁盘容量
    检测磁盘是否已经准备好
    取消磁盘共享
    远程关闭计算机
    实现注销 关机 重启计算机
    禁止用户关闭计算机
    将计算机设置为休眠状态
    java正则表达式
    JSONArray排序和倒转
    head first 设计模式笔记8-模板方法模式
  • 原文地址:https://www.cnblogs.com/yzbpxx/p/10594105.html
Copyright © 2011-2022 走看看