SRM488 Div2 Hard(1000) TheBoringGameDivTwo

試合の進み方が9通りあって、それぞれの回数をx1〜x9とすると、
x1(0,0,0,+1,0,+1)+x2(0,+1,0,0,0,+1)+x3(-1,+1,0,+1,+1,0)+x4(0,+1,-1,+1,+1,0)+x5(+1,0,0,0,0,+1)+x6(0,0,+1,0,0,+1)+x7(0,+1,+1,0,+1,+1)+x8(+1,0,0,+1,+1,+1)+x9(0,+1,0,+1,+2,0)=(scoreJ,killedJ,scoreB,killedB,scoreF,killedF)
x1,x2,x3,x4,x5,x6,x7,x8,x9≧0。
いくつかの変数の値を決めて他の変数の値を求める。

#include <vector>
using namespace std;

class TheBoringGameDivTwo{public:
vector <int> find( int scoreJ, int killedJ, int scoreB, int killedB, int scoreF, int killedF )
{
    int minX = 99999999;
    int maxX = -1;

    for ( int x3=0; x3<=killedJ; x3++ )
    for ( int x4=0; x3+x4<=killedJ; x4++ )
    for ( int x5=0; x5<=killedF; x5++ )
    for ( int x6=0; x5+x6<=killedF; x6++ )
    {
        int x8 = scoreJ + x3 - x5;
        int x7 = scoreB + x4 - x6;
        int x9_2 = scoreF - x3 - x4 - x7 - x8;
        int x2 = killedJ - x3 - x4 - x7 - x9_2/2;
        int x1 = killedB - x3 - x4 - x8 - x9_2/2;

        if ( x9_2 % 2 == 0  &&
             x1 + x2 + x5 + x6 + x7 + x8 == killedF  &&
             x1 >= 0  &&  x2 >= 0  &&  x7 >= 0  &&  x8 >= 0  &&  x9_2 >= 0 )
        {
            int X = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9_2/2;
            minX = min( minX, X );
            maxX = max( maxX, X );
        }
    }

    vector<int> ans;
    if ( minX <= maxX )
        ans.push_back( minX ),
        ans.push_back( maxX );
    return ans;
}};