M - 我成了瘸腿鹅(栈应用)

74 篇文章 12 订阅

Description

智 (hei) 慧 (bang) 长 (yi) 者 (ge) 阿福虽说是智勇双全,却无奈老是被该 (zheng) 死 (yi) 的成龙欺负。既然武斗不行,那么今天阿福决定靠他的智慧为自己找回些面子。所以他今天打算和成龙来比纸牌接龙游戏,输的人将会接受惩罚。游戏是这样的阿福先出牌,然后成龙出牌,出的牌按出牌顺序排成一列,如果当前出的牌在出牌序列中,那么那个人可以取走两张相同牌之间的所有牌并加上相应于牌数的分。比如原牌的排列为 5 4 3 6 9 8 现在成龙出牌 9 那么他可以取走 9 8 9 得到 3 分,然后牌的序列就变成 5 4 3 6 了。

最后看他们两个人的得分谁比较高,分数低的人将会接受惩罚,由于阿福长的比较丑,所以得分相同的情况下算阿福输(长得丑怪我咯)。

智 (hei) 慧 (bang) 长 (yi) 者 (ge) 阿福相信自己智勇双全一定会赢的,所以他打算赌得大一点:”谁输了就把他打成瘸腿鹅!”。由于没有人见证了他们的比赛过程,只知道他们的总出牌序列,想在好奇得到 UMR 想知道最后谁成了瘸腿鹅,但是 UMR 智商令人着急所以只能聪明的你求助了,你能告诉他谁被打成瘸腿鹅了吗?如果你说对了 UMR 将会将给你一个大大的 AC 作为回报。

Input
第一行输入一个 n,代表总共出了 n 张牌 (2⩽n⩽100000)。

接下来 n 个数ai,代表他们出的牌 (1⩽ai⩽10)。

Output
​如果阿福输了输出 ON!

否则输出 HaHa!(不存在的)。

Sample
nput

9
1 2 5 8 7 1 8 7 8

Output

ON!

Hint

阿福先出牌。

注意:加的是牌数!!!

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
const int N = 1e5 + 10;
using namespace std;

int dp[N];
int q[N];

int main()
{
    int n;
    cin>>n;
    int i;
    int cnt=0;
    int afu=0;
    int clong=0;
    for(i=1; i<=n; i++)
    {
        int k;
        cin>>k;
        if(!dp[k])
        {
            q[++cnt]=k;
            dp[k]++;
        }
        else
        {
            if(i%2==0)
            {
                clong++;
                while(q[cnt]!=k)
                {
                    dp[q[cnt--]]--;
                    clong++;
                }
                clong++;
            }
            else
            {
                afu++;
                while(q[cnt]!=k)
                {
                    dp[q[cnt--]]--;
                    afu++;
                }
                afu++;
            }
            dp[k]=0;
            cnt--;
        }
    }
    if(afu<=clong)
        cout<<"ON!"<<endl;
    else
        cout<<"HaHa!"<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值