uva 401 Palindromes

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=show_problem&problem=342 题意:问一个字符串是不是回文串,是不是镜像串。镜像串的意思是。。从镜子里看还一样。。给定了一些存在镜像的字母和数字。。 思路:回文串的判断用c++的string要更容易一些。。直接reverse一下。。判断是否相等就行。。。然后需要注意的是。。如果某个字符补存在镜像那么一定不是镜像串

如果某个字符不存在镜像那么一定不是镜像串!

如果某个字符不存在镜像那么一定不是镜像串!

蠢哭惹好么。。。。

* ***********************************************
Author :111qqz
Created Time :2016年01月20日 星期三 16时00分57秒
File Name :code/uva/401.cpp
************************************************ */

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#define fst first
#define sec second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ms(a,x) memset(a,x,sizeof(a))
typedef long long LL;
#define pi pair < int ,int >
#define MP make_pair

using namespace std;
const double eps = 1E-8;
const int dx4[4]={1,0,0,-1};
const int dy4[4]={0,-1,1,0};
const int inf = 0x3f3f3f3f;
string a,b;
char tmp[1000005];
map<char,char>mp;
void init()
{
    mp.clear();
    mp['A']='A';

    mp['E']='3';
    mp['3']='E';

    mp['H']='H';
    mp['I']='I';

    mp['J']='L';
    mp['L']='J';

    mp['M']='M';
    mp['O']='O';
    mp['0']='O';

    mp['S']='2';
    mp['2']='S';

    mp['T']='T';
    mp['U']='U';
    mp['V']='V';
    mp['W']='W';
    mp['X']='X';
    mp['Y']='Y';

    mp['Z']='5';
    mp['5']='Z';

    mp['1']='1';
    mp['8']='8';
}

void solve ( bool x,bool y)
{
    if (!x&&!y) puts(" -- is not a palindrome.");
    if (x&&y) puts(" -- is a mirrored palindrome.");
    if (x&&!y) puts(" -- is a regular palindrome.");
    if (!x&&y) puts(" -- is a mirrored string.");
}

bool pal(string x)
{
    int len = x.length();
    for ( int i = 0 ; i< len/2  ; i++)
    {
	if (x[i]!=x[len-1-i]) return false;
    }
    return true;
}
bool mirr(string x,string y)
{
    int len = x.length();
    for ( int i = 0 ; i < len/2 ;  i++)
    {
	if (x[i]!=y[len-1-i]) return false;
    }
    return true;
}
int main()
{

	#ifndef  ONLINE_JUDGE 
	freopen("code/in.txt","r",stdin);
  #endif
	init();
	while (scanf("%s",tmp)!=EOF)
	{
	    a = tmp;
	    bool ok1 = false;
	    bool ok2 = false;
	    b = a;
	    reverse(b.begin(),b.end());
	    if (a==b) ok1= true;
	    ok1 = pal(b);
	    int len = b.length();
	    int cnt = 0 ;
	    for ( int i = 0 ; i < len ; i++ )
	    {
		if (mp.count(b[i])==1)
		{
		    cnt++;
		    b[i] = mp[b[i]];
		}
	    }
	    cout<<a;
	    if (a==b&&cnt==len) ok2=true;

	    
	    solve(ok1,ok2);
	    
	    cout<<endl;
	}

  #ifndef ONLINE_JUDGE  
  fclose(stdin);
  #endif
    return 0;
}