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