zoukankan      html  css  js  c++  java
  • SOJ4389 川大贴吧水王 队列

    描述

    _L的室友HZ喜欢在川大贴吧上发帖,据传说,HZ在川大贴吧上发的贴子数已经超过了该贴吧贴子总数的一半,被江湖人封为川大贴吧水王,你能帮_L迅速找出这位川大贴吧水王HZ的ID吗?

    已知川大贴吧贴子总数为n,给出n个贴子作者的ID,求HZ的ID。

    Input

    输入文件包含多组测试数据。第一行为测试的数据组数T(T<=40)。
    接下有T组数据,第一行输入贴子总数n(1<=n<=10000000),接下来的一行有n个正整数,分别为每位贴子作者的ID号(该ID号为不超过10^9的正整数)
    

    Output

    输出T行,每行为该组测试数据的川大贴吧水王HZ的ID。
    

    Example Input

    2
    3
    1 2 2
    5
    1 2 3 3 3

    Example Output

    2
    3

     (原题戳我)

    思路:

    本题的题目类型很像《编程之美》那本书中的找水王的题目,最朴素的方法是将所有帖子的ID之后排序,找出中位数,但是由于本题数据规模太大,所以如果这么做的话会超时,于是可以利用队列来解题。每次读入一个数就把他和队列中现存的数进行比对,如果一样就放进队列中,不然就把队列最前面的数删除。因为水王的帖子总数过半,所以无论怎么样都可以保证最后留下的是水王的ID,等读取完毕后,取出队列中的首元素即可。

    AC代码:

    #include <stdio.h>
    #include <queue>
    #include <algorithm> 
    #include <iostream>
    using namespace std;
    
    queue<int> que;
    
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            while(que.size()){
                que.pop();
            }
            int n;
            scanf("%d",&n);
            int temp;
            for(int i=0;i<n;i++){
                scanf("%d",&temp);
                if(que.empty()){
                    que.push(temp);
                }else if(que.front()==temp){
                    que.push(temp);
                }else {
                    que.pop();
                }
            }
            int res=que.front();
            printf("%d
    ",res);
        }
        return 0;
    } 

    相似题目:

    HDU1029 Ignatius and the Princess IV

  • 相关阅读:
    HBase 操作
    HBase Java API 例子
    微信浏览器拖动出现黑色/白色背景、网址问题解决方案
    layui弹出层置顶弹出
    使用layui时,ajax执行后,重新渲染页面的方法
    宝塔更新
    js 播放音频文件 兼容火狐 谷歌浏览器
    SAP断点
    error_log 用法
    SE开头的事务代码
  • 原文地址:https://www.cnblogs.com/87hbteo/p/7146007.html
Copyright © 2011-2022 走看看