[DP] HDU 1029

题意

给n(奇数)个数,定义特殊的数为在序列中出现次数不少于(n+1)/2次的数,找出这个特殊的数

思路

……….
看着这道题我是蒙蔽的
因为太简单了hhhh
我做的也不太一样,一个一个输入然后记录就好了(自认为最简单又好懂)
以后也可以知道一个一个输入的好处hhh

不过他们做的好像更666

(设置一标志量num,按照原顺序依次迭代,随便假定一个解,如果a[i]==ans,num++,否则num–,当num为0时将当前a[i]作为新解。因为n为奇数,且特殊值出现次数大于一半,所以任何情况下,特殊值做为解时代num不会小于1,所以最终的解一定就是特殊值。)

代码
#include <cstring>
#include <iostream>

#define N 1000005

using namespace std;

int dp[ N ];

int main () {
    int n;
    while ( ~scanf ( "%d", &n ) ) {
        memset ( dp, 0, sizeof ( dp ) );
        int a;
        int mx = 0;
        while ( n-- ) {
            scanf ( "%d", &a );
            dp[ a ]++;
            if ( dp[ a ] > dp[ mx ] )
                mx = a;
        }

        printf ( "%d\n", mx );
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值