#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include using namespace std; typedef long long ll; int N, M, A, C, row, top, down, tn, tm, dir, pos; char field[401][401], result[401][401]; int value[401][401]; #define sc for(int i=1; i<=N; i++){for(int j=1; j<=M; j++){ struct pellet { int n, m, dir, prev; }p; void Copy() { sc result[i][j] = field[i][j]; }}} int TestZero() { sc if (field[i][j] != 46)return 0; }}return 1;} int Balance() { int i, sum = 0; for (i = top; i <= down; i++) { sum += value[i][tm]; } return sum - 2 * A; } int BalanceVer() { int i, sum = 0; for (i = top; i <= down; i++) { sum += value[tn][i]; } return sum - 2 * A; } void solve24() { top = M / 2; tn = 2; dir = 1; row = 1; if (M % 2 == 0) down = top + 1; else down = top + 2; pos = 2; result[1][down] = 92; while (1) { if (dir == 1) { if (pos == 1) { // ................ pos = 1 ................OK if (tn < N) { if (BalanceVer() > 0) { result[tn][top] = result[tn][down] = 92; tn++; pos = 2; continue; } else { tn++; continue; } } else { // tn = N if (top == 1) { if (BalanceVer > 0) { result[tn][top] = 92; result[tn][down] = 47; break; } break; } else { result[tn][top] = 92; down++; result[tn][down] = 47; top--; tn--; dir = 2; pos = 2; continue; } } } else { // ................ pos = 2 .................OK if (tn 0) { result[tn][top] = result[tn][down] = 47; tn++; pos = 1; continue; } else { tn++; continue; } } else { // tn = N if (down == M) { if (BalanceVer > 0) { result[tn][down] = 47; result[tn][top] = 92; break; } break; } else { result[tn][down] = 47; top--; result[tn][top] = 92; down++; tn--; dir = 2; pos = 1; continue; } } } } else { //=========== dir = 2 ====================== if (pos == 1) { if (tn > 2) { // ................ pos = 1 ................OK if (BalanceVer() > 0) { result[tn][top] = result[tn][down] = 47; tn--; pos = 2; continue; } else { tn--; continue; } } else { // tn = 2 if (top == 1) { if (BalanceVer > 0) { result[tn][top] = 47; result[tn][down] = 92; break; } break; } else { result[tn][top] = 47; down++; result[tn][down] = 92; top--; tn++; dir = 1; pos = 2; continue; } } } else { // ................... pos = 2 ................ if (tn > 2) { if (BalanceVer() > 0) { result[tn][top] = result[tn][down] = 92; tn--; pos = 1; continue; } else { tn--; continue; } } else { //tn = 2 if (down == M) { if (BalanceVer > 0) { result[tn][down] = 92; result[tn][top] = 47; break; } break; } else { result[tn][down] = 92; top--; result[tn][top] = 47; down++; tn++; dir = 1; pos = 1; continue; } } } } } } void solve10(){ Copy(); row = 2; } void Input() { FILE *in = fopen("pinball.in", "r"); fscanf(in, "%i %i\n", &N, &M); fscanf(in, "%i %i\n", &A, &C); sc fscanf(in, "%c", &field[i][j]);}fscanf(in, "\n");} sc fscanf(in, "%i", &value[i][j]); }fscanf(in, "\n"); } } void Ouput() { FILE *out = fopen("pinball.out", "w"); fprintf(out, "%i\n", row); sc fprintf(out, "%c", result[i][j]);} fprintf(out,"\n"); } } int main() { Input(); if (TestZero() == 1) { Copy(); solve24(); Ouput(); return 0; } solve10(); Ouput(); return 0; }