SRM484 Div2 Hard(1000) CubeColoring

CubeColoring

頂点0,2,5,7の色を決めれば、頂点1,3,4,6の色は独立に選べる。

#include <string>
#include <vector>

using namespace std;

class CubeColoring{public:
long long theCount( vector <string> colors )
{
    int n = (int)colors[0].length();

    long long c = 0;

    for ( int v0=0; v0<n; v0++ )  if ( colors[0][v0]=='Y' )
    for ( int v2=0; v2<n; v2++ )  if ( colors[2][v2]=='Y' )
    for ( int v5=0; v5<n; v5++ )  if ( colors[5][v5]=='Y' )
    for ( int v7=0; v7<n; v7++ )  if ( colors[7][v7]=='Y' )
    {
        int s1, s3, s4, s6;
        s1 = s3 = s4 = s6 = 0;
        for ( int i=0; i<n; i++ )
        {
            if ( colors[1][i]=='Y' && i!=v0 && i!=v2 && i!=v5 ) s1++;
            if ( colors[3][i]=='Y' && i!=v0 && i!=v2 && i!=v7 ) s3++;
            if ( colors[4][i]=='Y' && i!=v0 && i!=v5 && i!=v7 ) s4++;
            if ( colors[6][i]=='Y' && i!=v2 && i!=v5 && i!=v7 ) s6++;
        }
        c += s1 * s3 * s4 * s6;
    }

    return c;
}};