#include<iostream> #include<queue> #include<vector> #include<set> #include<algorithm> usingnamespace std; vector<int> swap(vector<int> a,int beg,int len) ...{ int mid=len/2,end=beg+len-1;; for (int i=0;i!=mid;++i)...{ int temp=a[beg+i]; a[beg+i]=a[end-i]; a[end-i]=temp; } return a; } class SortingGame...{ public: int fewestMoves(vector<int> a,int num) ...{ int len=a.size(); vector<int> des(a); sort(des.begin(),des.end()); if (des==a) return0; set<vector<int>> vis; vis.insert(a); queue<vector<int>> qData; qData.push(a); queue<int> qTime; qTime.push(0); while (!qData.empty())...{ for (int i=0;i!=len-num+1;++i)...{ vector<int> temp(swap(qData.front(),i,num) ); if (temp==des) return++qTime.front(); if (!vis.count(temp))...{ vis.insert(temp); qTime.push(qTime.front()+1); qData.push(temp); } } qData.pop(); qTime.pop(); } return-1; } };
Problem Statement
In The Sorting Game, you are given a sequence containing a permutation of the integers between 1 and n, inclusive. In one move, you can take any k consecutive elements of the sequence and reverse their order. The goal of the game is to sort the sequence in ascending order. You are given a vector <int> board describing the initial sequence. Return the fewest number of moves necessary to finish the game successfully, or -1 if it's impossible.
Definition
Class:
SortingGame
Method:
fewestMoves
Parameters:
vector <int>, int
Returns:
int
Method signature:
int fewestMoves(vector <int> board, int k)
(be sure your method is public)
Constraints
-
board will contain between 2 and 8 elements, inclusive.
-
Each integer between 1 and the size of board, inclusive, will appear in board exactly once.
-
k will be between 2 and the size of board, inclusive.
Examples
0)
{1,2,3}
3
Returns: 0
The sequence is already sorted, so we don't need any moves.
1)
{3,2,1}
3
Returns: 1
We can reverse the whole sequence with one move here.
2)
{5,4,3,2,1}
2
Returns: 10
This one is more complex.
3)
{3,2,4,1,5}
4
Returns: -1
4)
{7,2,1,6,8,4,3,5}
4
Returns: 7
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.