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;
}