先对数据进行排序,然后看几个0,看看其余有几个间隔。
对于顺子就判断为不行需要注意
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool succeed(vector<int> &nums)
{
int king_nums=0;
sort(nums.begin(),nums.end());
int small_num=-1;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==0) king_nums++;
else if(small_num==-1) small_num=nums[i];
else if(nums[i]==small_num) return false;
else if(nums[i]==small_num+1) small_num=nums[i];
else
{
if(nums[i]-small_num-1>king_nums) return false;
else
{
king_nums-=(nums[i]-small_num-1);
small_num=nums[i];
}
}
}
return true;
}
int main()
{
string line;
getline(cin,line);
istringstream tmp0(line);
int n;
tmp0>>n;
vector<int> nums;
while(n!=0)
{
nums.clear();
getline(cin,line);
istringstream tmp1(line);
int k;
while(tmp1>>k)
{
nums.push_back(k);
}
if(succeed(nums)) cout<<"So Lucky!\n";
else cout<<"Oh My God!\n";
getline(cin,line);
istringstream tmp2(line);
tmp2>>n;
}
return 0;
}