Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

????????????????WA

Posted by 0506010237 at 2007-08-28 10:54:41 on Problem 2479
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct 
{
    int pre; //记录扫描的接点 
    int max;       
}node;
void out(int mg[50002],int k)
{
    int pre1=1,pre2=1,h=1,w=k,min=0,max=0;   
    node getmax1[50002],getmax2[50002];
    getmax2[0].max=0;
    while(h<=k && mg[h]<=0)h++;
    while(w>=1 && mg[w]<=0)w--;
    while(h<=k)//向后扫描 
    {
        while(h<=k && mg[h]>=0)
        {
            min=min+mg[h];  
            h++;
        }
        getmax1[pre1].max=min;
        getmax1[pre1++].pre=h-1;
        while(h<=k && mg[h]<=0)
        {
            min=min+mg[h];
            h++;           
        }      
        if(min<=0)
          min=0;
    }
    min=0;
    while(w>=1)//向前扫描 
    {
        while(w>=1 && mg[w]>=0)
        {
            min=min+mg[w];  
            w--;
        }
        getmax2[pre2].max=min;
        getmax2[pre2++].pre=w+1;
        while(w>=1 && mg[w]<=0)
        {
            min=min+mg[w];
            w--;           
        }      
        if(min<=0)
          min=0;
    }
    int p=pre2-1;
    for(int i=1;i<pre1;i++)//求最大值 
    {
        while(getmax1[i].pre>=getmax2[p].pre && p>=1)
          p--;
        if(max<getmax1[i].max+getmax2[p].max)
          max=getmax1[i].max+getmax2[p].max;        
    }  
    printf("%d\n",max);
}
int main()
{
    int n,k,j=1,h;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {  
       h=0;
       scanf("%d",&k);
       int mg[k+1];
       for(j=1;j<=k;j++)
       {
          scanf("%d",&mg[j]);
          if(mg[j]>0)
            h++;
       }     
       if(h<2)//当小于或等于一个正数的时候求其中2个最大的值 
       {
         int umin1=-987654,umin2=-987654;
         for(int i=1;i<=k;i++) 
         {
            if(mg[i]>umin1)
            {
              umin2=umin1;
              umin1=mg[i];
            }
            else if(mg[i]>umin2)
              umin2=mg[i];     
         }
           printf("%d\n",umin1+umin2);    
       }
       else
        out(mg,k);   
    }
    system("pause");
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator