您的位置:首页 > 理论基础

hdu 3793 浙大计算机研究生保研复试上机考试-2011年

2012-02-22 14:27 435 查看


Is It Symmetric

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 391 Accepted Submission(s): 159



Problem Description

It is easy to see that a string of digits like 1234321 is symmetric with 4 being the central digit. However it is less obvious if we consider the string as a circular one and shift it to the left as 2343211. Your task is to write a program to check if a circular
string is symmetric.



Input

Your program must read test cases from standard input.

The input file consists of several test cases. Each case occupies a line which contains the string. Each string contains less than 100 digits.

The input is finished by a "#".



Output

For each test case, your program must output to standard output. If the string is not symmetric, output "NO" in a line; else output "YES", followed by a space and the position of the center (the position index starts from 0). It is guaranteed that the length
of the string is an odd number and the center is unique.



Sample Input

2112343
798
#




Sample Output

YES 5
NO




Source

浙大计算机研究生保研复试上机考试-2011年

#include "iostream"
#include "stdio.h"
#include "math.h"
#include "vector"
#include "queue"
#include "memory.h"
#include "algorithm"
#include "string"
using namespace std;
#define N 105
char str
;

int Div(int s,int t)
{
    int center=-2;
    if(s==t)
       center=-1;
    bool flag=(t-s+1)%2;
    while(t>s&&str[s]==str[t])
        s++,t--;
    if(s>t&&!flag)//even
        center=-1;
    else if(s==t&&flag)//odd
        center=s;
    return center;
}

int main()
{
    int center1,center2,center;
    while(cin>>str&&strcmp(str,"#")!=0)
    {
        int len=strlen(str);
        bool flag=false;
        for(int i=0;i<len;i++)
        {
            center1=Div(0,i);
            center2=Div(i+1,len-1);
            if(center1!=-2&¢er2!=-2)
            {
                center=center1==-1?center2:center1;
                cout<<"YES "<<center<<endl;
                flag=true;
                break;
            }
        }
        if(!flag)
            printf("NO\n");
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐