zoukankan      html  css  js  c++  java
  • T133309 57级返校测试重测-T2-选票统计

    大致题意:

    • 找出个数超过n/4的数们。

    基本思路:

    • 一开始我是用map做的,然后就很玄学的TLE了。
    • 啊,那就换个法吧。
    • 先排个序,然后一样的数就在一起了,
    • 再然后直接从前往后遍历一下,就能得出结果了。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <list>
    using namespace std;
    #define R read()
    #define GC getchar()
    #define ll long long
    #define ull unsigned long long
    #define INF 0x7fffffff
    #define LLINF 0x7fffffffffffffff
    ll read(){
        ll s=0,f=1;
        char c=GC;
        while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
        return s*f;
    }
    int n,m[130010];
    int cnt,t;
    int flag;//是0表示一个获胜的也没有,就要输出"No such person."。
             //是1表示有获胜的。
    int main(){
        n=R;
        for(int i=1;i<=n;++i){
            m[i]=R;
        }
        sort(m+1,m+n+1);//排序
        t=m[1];cnt=1;//先记录一下
        for(int i=2;i<=n;++i){//从前往后遍历,因为第一位已经记录了,所以从下标2开始
            if(m[i]==t){//如果和前面一样,那么计数+1
                ++cnt;
            }else{//不一样,说明到头了
                if(cnt>n/4){//看记录的个数是否超过了n/4
                    flag=1;//标记
                    printf("%d
    ",t);
                }
                t=m[i];cnt=1;//再记录下一个数
            }
        }
        if(cnt>n/4){//再判断一下,因为在遍历的时候最后并没有到头
            flag=1;
            printf("%d
    ",t);
        }
        if(flag==0){
            printf("No such person.
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    在Windows .NET平台下使用Memcached
    Windows下配置使用MemCached
    B/S 网站技术选型
    HttpHandler与HttpModule的用处与区别
    TCP长连接与短连接的区别
    页和区 sql server
    聚集索引和非聚集索引的区别
    MicrosoftSQLServer中的锁模式
    我是如何在SQLServer中处理每天四亿三千万记录的
    datetime模块处理时间
  • 原文地址:https://www.cnblogs.com/FUXyao/p/12876087.html
Copyright © 2011-2022 走看看