zoukankan      html  css  js  c++  java
  • PAT 1054 The Dominant Color[简单][运行超时的问题]

    1054 The Dominant Color (20)(20 分)

    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 strictlydominant 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, 2^24^). 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-2^24.

     //一开始我的提交是这样的,牛客网上可以通过,但是pat上运行测试点3超时。

    #include <iostream>
    #include<stdio.h>
    #include<map>
    using namespace std;
    map<int,int> mp;
    int main() {
        int m,n,pix;
        int mx=0,mpx;
        cin>>m>>n;
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            cin>>pix;
            if(mp[pix]==0)
                mp[pix]=1;
            else
                mp[pix]++;
            if(mp[pix]>mx){
                mpx=pix;
                mx=mp[pix];
            }
        }
        cout<<mpx;
        return 0;
    }

    1.参考了大佬的代码,发现大佬是直接判断如果出现超过半数,那么就直接Return 0;

    2.修改return 0;之后提交仍是超时,就将mp==0去掉,直接出现就mp[pix]++;

    3.提交之后还是超时,以为是数据的问题,改为map<long,int>还是不行;

    4.最终将cin改为scanf即可,数据量大的时候cin读入会超时啊!

    最终AC代码如下:

    #include <iostream>
    #include<stdio.h>
    #include<map>
    using namespace std;
    map<int,int> mp;
    int main() {
        int m,n;
        int pix;
        scanf("%d %d",&m,&n);
        int len=m*n/2;
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            scanf("%d",&pix);
            mp[pix]++;
            if(mp[pix]>len){
               printf("%d",pix);
               return 0;
            }
        }
    
        return 0;
    }

    //第一次体会到,cin真的会超时。

  • 相关阅读:
    二元关系最小割
    DG观察日志传输
    [WC2007]剪刀石头布——费用流
    备库报 ORA-00313、ORA-00312、ORA-27037
    「清华集训 2017」无限之环
    The listener supports no services
    [SDOI2010]星际竞速——费用流
    ORA-16055: FAL request rejected
    [总结]网络流
    ORA-16047: DGID mismatch between destination setting and standby
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9504140.html
Copyright © 2011-2022 走看看