| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:请教:Time Limit ExceededIn Reply To:请教:Time Limit Exceeded Posted by:BlueBlood at 2005-03-19 11:13:42 > #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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator