#include #include #include #include #include #include #include using namespace std; int main() { int K, N; int score = 0; int A[100001]; int B[100001]; int* output[3]; for (int i = 0; i < 3; i++) { output[i] = (int*) malloc(100000 * sizeof(1)); } int pieces[4][4][100000]; int cursor[4][4]; scanf("%i %i", &K, &N); for (int a = 1; a <= 3; a++) { for (int b = a; b <= 3; b++) { cursor[a][b] = 0; } } for(int i = 1; i <= K; i++) { int val; scanf("%i", &val); A[i] = val; } for(int i = 1; i <= K; i++) { int val; scanf("%i", &val); B[i] = val; } for (int i = 1; i <= K; i++) { int a = A[i]; int b = B[i]; pieces[a][b][cursor[a][b]] = i; cursor[a][b]++; } int i = 2; int j = 2; int k = 0; int x = 0; for (int i = 2; i <= 3; i++) { for (int j = i; j <= 3; j++) { for (int k = 0; k < cursor[i][j]; k++) { for (int u = 0; u < j; u++) { for (int v = 0; v < i; v++) { output[u][x+v] = pieces[i][j][k]; } } x += i; } } } int xx = 0; int b1 = 0; int b2 = 0; int b3 = 0; while (xx < 2 * cursor[2][2]) { if (b2 < cursor[1][2]) { output[2][xx] = pieces[1][2][b2]; output[2][xx+1] = pieces[1][2][b2]; b2++; xx += 2; } else if (b3 < cursor[1][3] && xx+3 <= 2 * cursor[2][2]) { output[2][xx] = pieces[1][3][b3]; output[2][xx+1] = pieces[1][3][b3]; output[2][xx+2] = pieces[1][3][b3]; b3++; xx += 3; } else if (xx < 2 * cursor[2][2]) { output[2][xx] = pieces[1][1][b1]; b1++; xx++; } } while (b3 < cursor[1][3]) { output[0][x] = pieces[1][3][b3]; output[1][x] = pieces[1][3][b3]; output[2][x] = pieces[1][3][b3]; b3++; x++; } while (b2 + 3 <= cursor[1][2]) { output[0][x] = pieces[1][2][b2]; output[0][x+1] = pieces[1][2][b2]; output[1][x] = pieces[1][2][b2+1]; output[1][x+1] = pieces[1][2][b2+1]; output[2][x] = pieces[1][2][b2+2]; output[2][x+1] = pieces[1][2][b2+2]; b2 += 3; x += 2; } while (b1 + 3 <= cursor[1][1]) { output[0][x] = pieces[1][1][b1]; output[1][x] = pieces[1][1][b1+1]; output[2][x] = pieces[1][1][b1+2]; b1 += 3; x++; } while (b2 < cursor[1][2]) { output[0][x] = pieces[1][2][b2]; output[1][x] = pieces[1][2][b2]; output[2][x] = pieces[1][1][b1]; b1++; b2++; x++; } for (int i = 0; i < 3; i++) { for (int j = 0; j < N-1; j++) { printf("%i ",output[i][j] ); } // Remove one number from the output to check wrong answers // printf("%i\n",output[i][N-1] + 1); } return 0; }