/* Cho 2 so nguyen L và N. Hay liet ke cac xau nhi phan do dài n có tính chát, bat kì 2 xâu con nào do dài K lien nhay deu khac nhau */#include <iostream>#include <iomanip>int A[100];int LENGTH, SUB_LEN;int index;void PRINT(){ index++; cout << " The index " << index << "-->"; for ( int x = 0; x < LENGTH; x++ ) cout << A[x]; cout << endl; }bool CHECK(){ int running_variable; int TEMP = SUB_LEN; int X = 0; /*--------------------------START---------------------------------------*/ do { running_variable = X; do { int repeat_times = 0; int Y = 0; for ( int i = running_variable; i < TEMP; i++) { if ( A[i] == A[Y+TEMP] ) { repeat_times++; Y++; } else break; /*Thoat khoi for neu có dã có bat kì 1 phan tu thuoc day truoc khac day sau thì ko càn xet tiep nua */ } /* Thoát han~ ra khoi hàm ngay lap túc, dãy da ko thoa dk */ if ( repeat_times == SUB_LEN ) return false; running_variable = running_variable + SUB_LEN; TEMP = TEMP + SUB_LEN; } while ( running_variable < LENGTH - 2*SUB_LEN ); /*Chỗ ni hay nữa nè */ X++; /* Lùi vào trong -> xét 1 dãy con moi */ TEMP = SUB_LEN + X; /* Do dài chuoi con thay doi theo X */ } while ( X < LENGTH/SUB_LEN ); /*chỗ ni hay nè */ /*--------------------------END-----------------------------------------*/}void BACKTRACK ( int i ){ for ( int j = 0; j <= 1; j++ ) { A[i] = j; if ( i == LENGTH - 1 ) { if ( CHECK() != false ) PRINT(); } else { BACKTRACK ( i + 1 ); } }}void main(){ index = 0; cout << "Enter a number : "; cin >> LENGTH; cout << "Enter a length : "; cin >> SUB_LEN; for ( int x = 0; x < LENGTH; x++ ) A[x] = 0; BACKTRACK (0); cin >> index; }