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

请教:Time Limit Exceeded

Posted by BlueBlood at 2005-03-19 11:13:42 on Problem 1674
#include <iostream>
#include <cstdlib>

using namespace std;

int n;
int *Permutation;

bool IsSequen( void )
{
    for (int i=1; i<n; i++)
        if ((Permutation[i] - Permutation[i-1]) != 1)
                return false;
    return true;
}    

int FindMinEnd(int end)
{
    while (end > 0)
    {
        if (Permutation[end] > end )
            end --;
        else
            return end;
    }        
    
    return end;
}

int FindMaxBegin(int begin,int end)
{
    while ( begin < n-1)
    {
        if (Permutation[begin] < Permutation[end])
                begin ++;
        else
                return begin;
    }    
    
    return begin;
}      

int main()
{
    int t;
    int i;
    
    cin >> t;
    
    for (int j=0; j < t; j++)
    {
        cin >> n;
        
        Permutation = new int [n];
        int count = 0;
        for (i=0; i<n; i++)
            cin >> Permutation[i];
        
        if (IsSequen( ))
        {
           cout << 0 << endl;
           continue;   
        }    
        else
        {
            int MaxBegin = 0, MinEnd = n-1;
          
            do{
               MinEnd = FindMinEnd( n - 1);
               MaxBegin = FindMaxBegin ( 0 , MinEnd);
               
                if (MaxBegin == n-1 || MinEnd == 0)
                    break;
                else
                {
                    int temp = 0;
                    
                    temp = Permutation[MaxBegin];
                    Permutation[MaxBegin] = Permutation[MinEnd];
                    Permutation[MinEnd] = temp;
                    count ++;
                }     
                
                if (IsSequen())
                {
                    cout << count << endl;
                    break;
                }    
            }
            while (MaxBegin != MinEnd); 
            
             
        }    
         delete Permutation; 
    }    
    
    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