C++程式:找出最大化網格中偶數單元格數量的操作次數
假設我們給定一個維度為h * w的網格。網格中的每個單元格都分配了一個特定值。我們必須最大化具有偶數值的單元格數量。為此,我們可以選擇一個以前未被選擇的單元格,然後將當前單元格的值減少1,並將位於當前單元格垂直或水平相鄰的另一個單元格的值增加1。我們列印操作次數以及增加和減少操作的單元格編號。輸出格式如下:
操作次數
第1個(減少的單元格位置) - (增加的單元格位置)
....
第n個(減少的單元格位置) - (增加的單元格位置)
因此,如果輸入像h = 3,w = 3,grid = {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}},則輸出將為
4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)
步驟
為了解決這個問題,我們將遵循以下步驟:
Define a new array result that contains a tuple
for initialize i := 0, when i < h, update (increase i by 1), do:
tp := 0
for initialize j := 0, when j < w, update (increase j by 1), do:
if tp > 0, then:
insert tuple(i, j - 1, i, j) at the end of result
grid[i, j] := grid[i, j] + tp
if grid[i, j] mod 2 is same as 1 and j < w-1, then:
grid[i, j] := grid[i, j] - 1
tp := 1
Otherwise
tp := 0
tp := 0
for initialize i := 0, when i < h, update (increase i by 1), do:
if tp > 0, then:
insert tuple(i - 1, w - 1, i, w - 1) at the end of result
grid[i, w - 1] := grid[i, w - 1] + tp
if grid[i, w - 1] mod 2 is same as 1, then:
grid[i, w - 1] := grid[i, w - 1] - 1
tp := 1
Otherwise
tp := 0
print(size of result)
for initialize i := 0, when i < size of result, update (increase i by 1), do:
print('(' + first value of result[i] + ',' + second value of result[i] + '- (' + third value of result[i] + ',' + fourth value of result[i])示例
讓我們看看下面的實現,以便更好地理解:
#include <bits/stdc++.h>
using namespace std;
void solve(int h, int w, vector<vector<int>>grid){
vector<tuple<int,int,int,int>> result;
for(int i = 0; i < h; i++){
int tp = 0;
for(int j = 0; j < w; j++){
if(tp > 0){
result.push_back(make_tuple(i, j-1, i, j));
grid[i][j] += tp;
}
if(grid[i][j]%2 == 1 && j < w-1){
grid[i][j] -= 1;
tp = 1;
}
else
tp = 0;
}
}
int tp = 0;
for(int i = 0; i < h; i++){
if(tp > 0){
result.push_back(make_tuple(i-1, w-1, i, w-1));
grid[i][w-1] += tp;
}
if(grid[i][w-1]%2 == 1){
grid[i][w-1] -= 1;
tp = 1;
}
else
tp = 0;
}
cout << (int)result.size() << endl;
for(int i = 0; i < (int)result.size(); i++){
cout << "(" << get<0>(result[i]) << ", " << get<1>(result[i])
<< ")" << " - (" << get<2>(result[i]) << ", " << get<3>(result[i]) << ")";
cout << '\n';
}
}
int main() {
int h = 3, w = 3 ;
vector<vector<int>> grid = {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}};
solve(h, w, grid);
return 0;
}輸入
3, 3, {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}輸出
4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP