SRM484 Div2 Hard(1000) 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; }};