Ziyao has a big drawing board with N * M squares. At the beginning, all the squares on the board are white, represented by the number 0. We can see the 4 * 4 whilte drawing board is:
0000
0000
0000
0000
One day Ziyao wants to draw on the board. He will draw for T times. Each time he will draw a rectangle with the color he like.For each rectangle, we use 4 integers (x1, y1, x2, y2) to express it. It means all squares whose coordinate (x, y) exist both x1 <= x <=x2 and y1 <= y <= y2. If two rectangles are intersected, the intersected part will be covered by the color later drawing.
For example, if he draw a rectangle (1, 2, 3, 3) on the white board with the color ‘1’, the board will be:
0110
0110
0110
0000
And if he go on drawing a rectangle (2, 1, 3, 2) by ‘2’, the board will be:
0110
2210
2210
0000
Now, Ziyao Big God will tell you his drawing process, please tell me how many colors will be there on the board.
The first line has 3 integers, N, M, T.(0 < N, M <= 100, 0 <= T <=20)
The next T lines, each line has 5 integers x1, y1, x2, y2, c, (x1, y1, x2, y2) express the rectangle and c is the color.(1 <= x1, x2 <= N, 1 <= y1, y2 <=M, 1 <= c <= T)
Just one number, how many colors on the board.
PS:’0’ is also a kind of color.
4 4 2
1 2 2 3 1
2 1 3 2 2
4 4 2
1 1 1 1 2
1 1 4 4 1
3
1
Hint
For the first sample, the board is
0110
2210
2200
0000
There are 3 colors:0,1,2.
For the second sample, the board is
1111
1111
1111
1111
There are only 1 color: 1.
这道题的话还好,主要注意的是题目的第一行或者列是数组下标为0的时候,这里要注意,还有就是怎么算出总共的颜色有多少种,我是另外开个数组,然后有数字的就做上标记
我的
#include<stdio.h> int a[100][100] = {0}; int main() { int n, m, t; int b[200] = {0}; int x1, y1, x2, y2, c, sum = 0, flag = 0; scanf("%d %d %d", &n, &m, &t); while (t--) { scanf("%d %d %d %d %d", &x1, &y1,&x2, &y2, &c); x1 -= 1; x2 -= 1; y1 -= 1; y2 -= 1; for (int i = x1; i <= x2; i++) { for (int j = y1; j <= y2; j++) { a[i][j] = c; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int temp = a[i][j]; b[temp]++; } } for (int i = 0; i < 200; i++) { if (b[i] != 0) sum++; } printf("%d", sum); return 0; }
标程(思想差不多)
1.#include <stdio.h> 2.int n, m, t, a[100][100], i, j, ans; 3.int main() { 4. int x1, y1, x2, y2, c, colors[21]; 5. scanf("%d%d%d", &n, &m, &t); 6. for (i = 0; i < n; i++) 7. for (j = 0; j < n; j++) a[i][j] = 0; 8. while (t--) { 9. scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c); 10. for (i = x1; i <= x2; i++) 11. for (j = y1; j <= y2; j++) 12. a[i - 1][j - 1] = c; 13. } 14. for (i = 0; i <= 20; i++) colors[i] = 0; 15. for (i = 0; i < n; i++) 16. for (j = 0; j < m; j++) 17. colors[a[i][j]] = 1;\\原来是可以这样的 18. ans = 0; 19. for (i = 0; i <= 20; i++) ans += colors[i]; 20. printf("%d", ans); 21. return 0; 22.}
原文:http://www.cnblogs.com/-lyric/p/5124850.html