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

哪位能帮我看看为什么错,上三角和下三角考虑了,

Posted by foreverlin at 2009-02-10 16:15:11 on Problem 1471
#include<iostream>
using namespace std;
char a[401][401];
int len,n,beg,end,s1,s2;
// 暴搜 
int check1(int beg,int end,int key)//检查头朝上的 
{
    int i,j,k,ss=0;
    while(beg<=end)
    {
          if(key<0)return 0;         
          for(j=beg;j<=end;j++)
          {
              if(a[key][j]=='#')return 0;                 
              }   
          ss+=(end-beg+1);         
          beg++;
          end--;
          key--;    
          }
    return ss;      
    }
int check2(int beg,int end,int key)//检查头朝下的 
{
    int i,j,k,ss=0;
    while(beg<=end)
    {
          if(key>=n)return 0;         
          for(j=beg;j<=end;j++)
          {
              if(a[key][j]=='#')return 0;                 
              }   
          ss+=(end-beg+1);         
          beg++;
          end--;
          key++;    
          }
    return ss;    
    }
int main()
{
    int i,j,k,c=1,sum;
    while(scanf("%d ",&n)!=EOF)
    {
          if(n==0)break;
          memset(a,' ',sizeof(a));
          sum=0;
          for(i=0;i<n;i++)
          {
              gets(a[i]);
              if(i==0){len=strlen(a[i]);}            
              }          
/*          for(i=0;i<n;i++)
          {
              for(j=0;j<len;j++)
              {
                  printf("%c",a[i][j]);              
                  }
              printf("\n");                
              }  */      
          for(i=0;i<n;i++)
          {
              for(j=0;j<len;j++)
              {
                  if(a[i][j]=='-')
                  {
                     beg=j;
                     int count=1;
                     for(k=beg+1;k<len;k++)
                     {
                         if(a[i][k]=='-')count++;
                         else break;                
                         }
                     end=j+count-1;
                     if(count%2)
                     {
                        if(i%2!=j%2)//向上 
                        {        
                           s1=check1(beg,end,i);
                           if(s1>sum)sum=s1;
                           }
                        else if(i%2==j%2)//向下 
                        {    
                           s2=check2(beg,end,i);
                           if(s2>sum)sum=s2;
                           }        
                        }                 
                     }              
                  }            
              }
          printf("Triangle #%d\n",c++);
          printf("The largest triangle area is %d.\n\n",sum);        
          }
    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