Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct cut {
- int r1, c1, r2, c2;
- cut(int r1, int c1, int r2, int c2): r1(r1), c1(c1), r2(r2), c2(c2) {};
- };
- vector<vector<char>> readField(ifstream & input, int rows, int columns) {
- vector<vector<char>> field = vector<vector<char>>(rows, vector<char>(columns, 0));
- for (int i = 0; i < rows; i++)
- for (int j = 0; j < columns; j++) {
- input >> field[i][j];
- }
- return field;
- };
- // returns -1 if the cut is invalid, writes errors to standard output
- int score(vector<vector<char>> & field, vector<cut> & cuts, int l, int h) {
- int _score = 0;
- vector<vector<bool>> isUsed(field.size(), vector<bool>(field[0].size(), false));
- for (int k = 0; k < cuts.size(); k++) {
- cut cut = cuts[k];
- if ((cut.c2 - cut.c1) * (cut.r2 - cut.r1) > h) {
- cout << "Slice #" << k << " is too big" << endl;
- return -1;
- }
- int t = 0, m = 0;
- for (int i = cut.r1; i <= cut.r2; i++) {
- for (int j = cut.c1; j <= cut.c2; j++) {
- m += tolower(field[i][j]) == 'm';
- t += tolower(field[i][j]) == 't';
- if (isUsed[i][j]) {
- cout << "Slice #" << k << " caused intersection" << endl;
- return -1;
- } else {
- isUsed[i][j] = true;
- _score++;
- }
- }
- }
- if (t < l || m < l) {
- cout << "Slice #" << k << " is not valid" << endl;
- return -1;
- }
- }
- return _score;
- };
- void testScorePositive() {
- /*
- 3 5 1 6 TTTTT TMMMT TTTTT
- */
- int l = 1;
- int h = 6;
- vector<vector<char>> field = {
- {'T', 'T', 'T', 'T', 'T'},
- {'T', 'M', 'M', 'M', 'T'},
- {'T', 'T', 'T', 'T', 'T'}
- };
- vector<cut> cuts = {cut(0, 0, 2, 1), cut(0, 2, 2, 2), cut(0, 3, 2, 4)};
- assert(score(field, cuts, l, h) == 15);
- };
- void testScoreNegative() {
- /*
- 3 5 1 6 TTTTT TMMMT TTTTT
- */
- int l = 1;
- int h = 6;
- vector<vector<char>> field = {
- {'T', 'T', 'T', 'T', 'T'},
- {'T', 'M', 'M', 'M', 'T'},
- {'T', 'T', 'T', 'T', 'T'}
- };
- vector<cut> cuts = {cut(0, 0, 2, 3), cut(0, 2, 2, 2), cut(0, 3, 2, 4)};
- score(field, cuts, l, h);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement