| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1252 人关注过本帖, 2 人收藏
标题:杭电1003,纠结,其大侠帮忙看看哪错了
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
最大子段和也要讲。。。。
2010-07-20 17:20
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
大侠,出来罗
2010-07-20 19:46
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
Devil_W讲讲吧,关键是我也没看出来他哪错了╮(╯_╰)╭
呼叫Devil_W!
2010-07-20 19:53
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:15 
给一组sample吧 :
1
5 -1 -3 -4 0

sample out
0 5 5
我记得我当时写的时候也忘记了负数组的情况
另外,你一开始的
while(scanf("%d",&n)!=EOF)
应该写成:
scanf("%d",&n);不然可能会被判超时
这个题目好像有三种时间复杂度的方法,我这里贴上我的AC代码:
程序代码:
#include <stdio.h>

int num[100001];

int main()
{
    int l,n,i,sum,ps,pe,max,j,t=1,flag;
    scanf("%d",&l);
    while(l--)
    {
        flag=1;
        max=-2000;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&num[i]);
            if(num[i]>0)
                   flag=0;
              else
            {
                if(flag&&num[i]>max)
                {
                    ps=pe=i;
                    max=num[i];
                }
            }
        }
        if(!flag)
        {
             max=-1;
               sum=j=0;
        for(i=0;i<n;i++)
        {
            sum+=num[i];
            if(sum>max)
            {
                ps=j;
                pe=i;
                max=sum;
            }
            else if(sum<0)
            {
                sum=0;
                j=i+1;
            }
        }
        }
        if(t>1)
            printf("\n");
        printf("Case %d:\n",t);
        printf("%d %d %d\n",max,ps+1,pe+1);
        t++;
    }
    return 0;
}
2010-07-20 19:58
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
回复 14楼 flyingcat
你的sample对吗?1是l?5是n?那后面只有4个数啊
2010-07-20 21:13
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
#include <stdio.h>
int main()
{
    int a[100002]={0},n,m,flag=0;
         long N,yisum=-1001,j,i,p1,p2,ersum=0,k=0,position;
scanf("%d",&n);
{
m=n;
   while(n--)
{
    if(m>=0&&m<=20)
    {
            scanf("%ld",&N);
        for(j=0;j<N;j++)
             scanf("%d",&a[j]);
        for(j=0;j<N;j++)
            if(a[j]>0)
            {
                flag=1;
                break;
            }
            if(!flag)
            {
                for(i=0;i<N;i++)
                    if(yisum<a[i])
                    {
                        yisum=a[i];
                        position=i;
                    }
            }
        for(j=0;j<N&&flag;j++)
        {
            ersum=ersum+a[j];
                if(ersum<0)
                               {
                    ersum=0;
                    continue;
                               }
                else
            if(yisum<ersum)
            {
                yisum=ersum;
                p2=j;
            }
        }
                  ersum=0;
             for(k=p2;k>=0;k--)
                {
                ersum=ersum+a[k];
                  if(ersum==yisum)
                       p1=k;
                }
        printf("Case %d:\n",m-n);
        if(flag)
        printf("%ld %ld %ld\n",yisum,p1+1,p2+1);
        else
            printf("%ld %ld %ld\n",yisum,position+1,position+1);
            yisum=-1001;ersum=0;
            for(j=0;j<N;j++)
                a[j]=0;
        }
    if(n)
        printf("\n");
    }
   
}
    return 0;
}
这是最新代码,为什么还是提交不成功啊
2010-07-20 21:15
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
这题看来只有救世主才能看出错误了,呵呵
2010-07-20 21:51
Leelouder
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2010-7-19
收藏
得分:0 
看来很多人都在杭电上做题啊
2010-07-20 22:10
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:0 
首先,抱歉我sample中少了一个数据
原意是:
1
5 -1 -3 -4 -2 0
然后对于你后来发的代码
你的flag 一开始没有初始化
因为判断!flag的时候需要初始化flag=0
加上初始化后可以AC
祝 AC 愉快!
程序代码:
#include <stdio.h>
int main()
{
    int a[100002]={0},n,m,flag=0;
    long N,yisum=-10001,j,i,p1,p2,ersum=0,k=0,position;
    scanf("%d",&n);
        m=n;
        while(n--)
        {
            flag=0;
            if(m>=0&&m<=20)
            {
                scanf("%ld",&N);
                for(j=0;j<N;j++)
                    scanf("%d",&a[j]);
                for(j=0;j<N;j++)
                    if(a[j]>0)
                    {
                        flag=1;
                        break;
                    }
                    if(!flag)
                    {
                        yisum=-999999999;
                        for(i=0;i<N;i++)
                            if(yisum<a[i])
                            {
                                yisum=a[i];
                                position=i;
                            }
                            goto A;
                    }
                    for(j=0;j<N&&flag;j++)
                    {
                        ersum=ersum+a[j];
                        if(ersum<0)
                        {
                            ersum=0;
                            continue;
                        }
                        else
                            if(yisum<ersum)
                            {
                                yisum=ersum;
                                p2=j;
                            }
                    }
                    ersum=0;
                    for(k=p2;k>=0;k--)
                    {
                        ersum=ersum+a[k];
                        if(ersum==yisum)
                            p1=k;
                    }
A:
                    printf("Case %d:\n",m-n);
                    if(flag)
                        printf("%ld %ld %ld\n",yisum,p1+1,p2+1);
                    else
                        printf("%ld %ld %ld\n",yisum,position+1,position+1);
                    yisum=-10001;ersum=0;
                    for(j=0;j<N;j++)
                        a[j]=0;
            }
            if(n)
                printf("\n");
        }
    return 0;
}

2010-07-20 22:12
LSYHEFENG
Rank: 2
等 级:论坛游民
帖 子:112
专家分:71
注 册:2010-7-17
收藏
得分:0 
想不到又是这么水的错误,真感谢你为我找出来
2010-07-21 07:49
快速回复:杭电1003,纠结,其大侠帮忙看看哪错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034261 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved