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,看了帖子里说的全0等几种情况,运行都正确

Posted by mixue at 2008-07-18 15:20:46 on Problem 1042
#include<iostream>

using namespace std;

int getMax( int f[], int n )
{
    int max = 0;
    for( int i = 0; i <= n; i++ )
         if( f[max] < f[i] )
             max = i;
             
    return max;
}

bool haveFish( int f[], int n )
{
     int flag = false;
     for( int i = 0; i <= n; i++ )
          if( f[i] > 0 )
          {
              flag = true;
              break;
          }
          
     return flag;
}

bool better( int u1[], int u2[], int n )
{
     for( int i = 0; i < n; i++ )
     {
          if( u1[i] < u2[i] )
              return false;
          if( u1[i] == u2[i] )
              continue;
          if( u1[i] > u2[i] )
              return true;
     }
     
     return false;
} 

int main()
{
    int n;
    cin >> n;
    
    while( n != 0 )
    {
           int h;
           cin >> h;
           h *= 12;
           
           int *f = new int[n];
           int *d = new int[n];
           int *t = new int[n];
           int *m = new int[n];
           int *cf = new int[n];
           
           int **u = new int*[n];
           for( int i = 0; i < n; i++ )
                u[i] = new int[n];
           
           for( int i = 0; i < n; i++ )
                cin >> f[i];
                
           for( int i = 0; i < n; i++ )
                cin >> d[i];
                
           t[0] = 0;
           for( int i = 1; i < n; i++ )
           {
                cin >> t[i];
                t[i] += t[i-1];
           }
           
           for( int i = 0; i < n; i++ )
                m[i] = 0;
                
           for( int i = 0; i < n; i++ )
                for( int j = 0; j < n; j++ )
                     u[i][j] = 0;
                     
           for( int i = 0; i < n; i++ ) // the farest lake is i
           {
                int time = h - t[i];
                if( time <= 0 )
                    continue;
                    
                for( int j = 0; j < n; j++ )
                     cf[j] = f[j];
                     
                while( (time > 0) && haveFish( cf, i ) )
                {
                       int lake = getMax( cf, i );
                       
                       m[i] += cf[lake];
                       cf[lake] -= d[lake];
                       if( cf[lake] < 0 )
                           cf[lake] = 0;
                           
                       u[i][lake] += 1;
                       time -= 1;
                }
                if( time > 0 )
                    u[i][0] += time;
           }
           
           int max = 0;
           for( int i = 0; i < n; i++ )
           {
                if( m[max] < m[i] )
                    max = i;
                if( ( m[max] == m[i] ) && better( u[i], u[max], n ) )
                    max = i;
           }
           
            for( int i = 0; i < (n-1); i++ )
                cout << u[max][i]*5 << ",";
           cout << u[max][n-1]*5 << endl;
           cout << "Number of fish expected: " << m[max] << endl;
          
           
           
           delete[] f;
           delete[] d;
           delete[] t;
           delete[] cf;
           delete[] m;
           
           for( int i = 0; i < n; i++ )
                delete[] u[i];
           delete[] u;
           
           cin >> n;
           if( n > 0 )
               cout << endl;
    }
    
    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