pat1054. The Dominant Color (20)

1054. The Dominant Color (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Behind the scenes in the computer's memory, color is always talked about as a series of 24 bits of information for each pixel. In an image, the color with the largest proportional area is called the dominant color. A strictly dominant color takes more than half of the total area. Now given an image of resolution M by N (for example, 800x600), you are supposed to point out the strictly dominant color.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive numbers: M (<=800) and N (<=600) which are the resolutions of the image. Then N lines follow, each contains M digital colors in the range [0, 224). It is guaranteed that the strictly dominant color exists for each input image. All the numbers in a line are separated by a space.

Output Specification:

For each test case, simply print the dominant color in a line.

Sample Input:
5 3
0 0 255 16777215 24
24 24 0 0 24
24 0 24 24 24
Sample Output:
24

提交代码

 

 

 

方法一:

 1 #include <cstdio>
 2 int main(){
 3     int m, n, x, times = 0, candidate;
 4     scanf("%d%d", &m, &n);
 5     for (int i = 0; i < n; ++i){
 6         for (int j = 0; j < m; ++j){
 7             scanf("%d", &x);
 8             if (times == 0){
 9                 candidate = x;
10                 ++times;
11             }
12             else{
13                 if (x == candidate)
14                     ++times;
15                 else
16                     --times;
17             }
18         }
19     }
20     printf("%d\n", candidate);
21     return 0;
22 }

 

 

 

方法二:map

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 using namespace std;
 5 map<string,int> img;
 6 int main(){
 7     //freopen("D:\\INPUT.txt","r",stdin);
 8     int m,n,i,j;
 9     scanf("%d %d",&m,&n);
10     char color[15];
11     for(i=0;i<m;i++){
12         for(j=0;j<n;j++){
13             scanf("%s",color);
14             img[color]++;
15         }
16     }
17     map<string,int>::iterator it;
18     int half=m*n/2+1;
19     for(it=img.begin();it!=img.end();it++){
20         if(it->second>=half){
21             break;
22         }
23     }
24     cout<<it->first<<endl;
25     return 0;
26 }

 

posted @ 2015-08-31 14:42  Deribs4  阅读(205)  评论(0编辑  收藏  举报