CSU 2127零的执行人

CSU 2127零的执行人


Description

身为全CSU(California State University)最厉害的侦探——福尔摩柯,你应邀出席了一年一度的侦探峰会。在峰会召开之际,组委会却收到了一封神秘的恐吓信,扬言要对会场实施爆炸袭击。

根据信封留下的作为证据的指纹,嫌犯被锁定为n个人,每个人的指纹可以被序列化为一个字符串s**(仅由英文小写字母组成)**。同时机敏的你发现这起事件与一个神秘的黑衣组织有关,而这个组织内的人物都有一个特点,那就是他们的指纹经过重新排列后能够形成一个回文串。

面对正在接近的阴谋,你需要尽快确认出哪些人是属于神秘的黑衣组织。

Input

多组数据,数据组数不超过10

每组数据首先一个n,代表n个人

接下来n行,每行一个字符串s,代表该人的指纹

n<=100

|s|<=100000

|s|代表字符串的长度

Output

对于每一个人,如果这个人属于黑衣组织,则输出“Dark”

否则输出“Elementary”

Sample Input

3
aba
ab
c
1
ccf

Sample Output

Dark
Elementary
Dark
Dark

题意

  给出一个字符串,问只改变它字符的顺序能否构成回文串,如果能输出”Dark”,反之输出”Elementary”。

解题思路

  回文串是左右对称的,根据这个性质直接判断每个字符个数的奇偶性即可。字符串长度为奇数时,字符个数里面只能有一个奇数,如果长度是偶数,那么个数里面不能有奇数。

  由于开始的时候不知道字符的种类(那个括号里面的是后来加上去的,就直接上map了),924ms飘过~用数组做哈希表应该快一些。

代码

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<map>
using namespace std;
const int maxn = 1e5+5;

char str[maxn];
map<char,int> m;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0; i<n; i++)
        {
            m.clear();
            scanf("%s",str);
            int len=strlen(str),flag=0;
            for(int i=0; i<len; i++)
                m[str[i]]++;
            if(len%2)
            {
                for(map<char,int>::iterator it=m.begin(); it!=m.end(); it++)
                    if(it->second%2) flag++;
                if(flag>=2) puts("Elementary");
                else puts("Dark");
            }
            else
            {
                for(map<char,int>::iterator it=m.begin(); it!=m.end(); it++)
                    if(it->second%2) flag++;
                if(flag) puts("Elementary");
                else puts("Dark");
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36258516/article/details/80500824