zoukankan      html  css  js  c++  java
  • hdu 1029 Ignatius and the Princess IV

    Ignatius and the Princess IV

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32767 K (Java/Others)
    Total Submission(s): 30075    Accepted Submission(s): 12837


    Problem Description
    "OK, you are not too bad, em... But you can never pass the next test." feng5166 says.

    "I will tell you an odd number N, and then N integers. There will be a special integer among them, you have to tell me which integer is the special one after I tell you all the integers." feng5166 says.

    "But what is the characteristic of the special integer?" Ignatius asks.

    "The integer will appear at least (N+1)/2 times. If you can't find the right integer, I will kill the Princess, and you will be my dinner, too. Hahahaha....." feng5166 says.

    Can you find the special integer for Ignatius?
     
    Input
    The input contains several test cases. Each test case contains two lines. The first line consists of an odd integer N(1<=N<=999999) which indicate the number of the integers feng5166 will tell our hero. The second line contains the N integers. The input is terminated by the end of file.
     
    Output
    For each test case, you have to output only one line which contains the special number you have found.
     
    Sample Input
    5
    1 3 2 3 3
    11
    1 1 1 1 1 5 5 5 5 5 5
    7
    1 1 1 1 1 1 1
     
    Sample Output
    3
    5
    1
     
    本题题意是让你在给出的数组之中,找到出现次数大于等于(n+1)/2次的数字。
    我一开始的想法是:设置map数组标记数字出现的次数,只要次数到达了(n+1)/2,就把这个数字记录下来,然后输出。但是我们只知道n的大小,不知道这n个数字的大小,要是要这样 开数组标记的话,就要开2^31-1这么大。(不过这个题目的测试案例数字不大,可以这么写)
    代码思路:设置num和flag变量,

    我们按照序列依次扫描,先把第一个x的值给flag
    计数器num++ 然后向右扫描

    如果输入的x跟flag相同 那num就++,不同,就 --,
    一直重复下去,到了最后flag就是我们想要的那个多元素。

    下面是代码:

    #include <stdlib.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main() {
    int n;
    while(~scanf("%d",&n))
    {
    int num=0,flag,x;
    for(int i=0;i<n;i++)
    {
    scanf("%d",&x);
    if(num==0)
    {
    num++;
    flag=x;
    }
    else if(flag==x)
    {
    num++;
    }
    else
    {
    num--;
    }
    }
    printf("%d ",flag);
    }
    return 0;
    }

     
  • 相关阅读:
    覆盖索引和联合索引
    docker是个啥?
    golang--解决邮件发送标题乱码问题
    爬虫-爬取美少女壁纸
    漫谈--ssh协议-中间人攻击
    golang--常用的字符串操作
    干支纪年
    JS实现纯前端将数据导出Excel两种方式亲测有效
    猴子吃香蕉-Java岗位面试题
    content:"26A1"特殊字符和图标记录
  • 原文地址:https://www.cnblogs.com/52why/p/6564555.html
Copyright © 2011-2022 走看看