Problem Statement | |||||||||||||
Cucumber Boy likes drawing pictures. Today, he plans to draw a picture using a very simple graphics editor.
The editor has the following functions:
At this moment, all pixels on the infinite canvas are transparent. Cucumber Boy has already stored a picture in the clipboard. You are given this picture as a vector <string> clipboard.
Cucumber Boy now wants to paste the clipboard picture onto the canvas exactly T times in a row. For each i, when pasting the clipboard for the i-th time, he will choose the pixel (i,i) as the upper left corner of the pasted picture.
You are given the vector <string> clipboard and the int T. Return the number of black pixels on the canvas after all the pasting is finished. | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Constraints | |||||||||||||
- | clipboard will contain between 1 and 50 elements, inclusive. | ||||||||||||
- | Each element of clipboard will contain between 1 and 50 characters, inclusive. | ||||||||||||
- | Each element of clipboard will contain the same number of characters. | ||||||||||||
- | Each character of each element of clipboard will be 'B' or '.'. | ||||||||||||
- | T will be between 1 and 1,000,000,000, inclusive. | ||||||||||||
Examples | |||||||||||||
0) | |||||||||||||
| |||||||||||||
1) | |||||||||||||
| |||||||||||||
2) | |||||||||||||
| |||||||||||||
3) | |||||||||||||
| |||||||||||||
4) | |||||||||||||
| |||||||||||||
5) | |||||||||||||
|
只有在同一对角线的各自会影响到对方,所以按照对角线的方式来遍历每个格子,然后记录每个格子的开始和结束位置,之后做一下处理
1 #include2 #include 3 using namespace std; 4 5 class PastingPaintingDivTwo 6 { 7 public: 8 long long calc(vector clipboard, int T, int x, int y) 9 {10 long long sum = 0;11 int endX = -1;12 int endY = -1;13 while(x < clipboard.size() && y < clipboard[0].size())14 {15 if (clipboard[x][y] == 'B')16 {17 int endCurX = x + T - 1;18 int endCurY = y + T - 1;19 int startCurX = max(x, endX);20 int startCurY = max(y, endY);21 22 sum += max(0, endCurX - startCurX + 1);23 24 endX = max(endCurX + 1, endX);25 endY = max(endCurY + 1, endY);26 }27 28 x++;29 y++;30 }31 32 return sum;33 }34 35 long long countColors(vector clipboard, int T)36 {37 if (clipboard.size() == 0)38 return 0;39 40 long long sum = 0;41 for(int i = 0; i < clipboard.size(); i++)42 {43 sum += calc(clipboard, T, i, 0);44 }45 46 for(int i = 1; i < clipboard[0].size(); i++)47 {48 sum += calc(clipboard, T, 0, i);49 }50 51 return sum;52 }53 };