SRM498 Div2 Hard(950) NinePuzzle

通常の正方形のパズルと異なり任意の配置が可能なので、並びを気にせずにinitをgoalに塗り替えるのに必要な回数を求めれば良い。

#include <string>
#include <algorithm>
using namespace std;

class NinePuzzle{public:
int getMinimumCost( string init, string goal )
{
    return ( abs(count(init.begin(),init.end(),'R')-count(goal.begin(),goal.end(),'R'))
           + abs(count(init.begin(),init.end(),'G')-count(goal.begin(),goal.end(),'G'))
           + abs(count(init.begin(),init.end(),'B')-count(goal.begin(),goal.end(),'B'))
           + abs(count(init.begin(),init.end(),'Y')-count(goal.begin(),goal.end(),'Y')) ) / 2;
}};