【注意getline吃空格】第三屆ACM/ICPC程式設計知識競賽—— 又見迴文

來源:互聯網
上載者:User

來源:點擊開啟連結

求十萬個字元以內的迴文串,可以採用上一篇中的manacher演算法,另外要判斷空格,把無關的空格去掉。

按這個思路,WA了兩次,原因是getchar()的時候會把第一個範例的第一個字元給吃掉,但如果不加,需要按兩下斷行符號才有結果,與題目不符,只能動手判斷一下了。。

 

// 原串最大長度N// 返回最大迴文字串 res#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <algorithm>#include <iostream>#include <ctype.h>using namespace std;const int N = 200009;int rid[N<<2];string clear_space(string s){string res;for(int i=0;i<s.length();i++){if(isblank(s[i])){continue;}else if(isupper(s[i])){res+=s[i]+32;}else if(islower(s[i])){res+=s[i];}}return res;}string manacher(string s){    string t, res;        int L = s.size();        // init    t += '?';    for(int i = 0; i < L; i++)        t += '#', t += s[i];    t += "#*";    // getrid    for(int i=1,j=0,k,End=(int)t.size();i<End;){        while( t[i-j-1]==t[i+j+1] ) j++;        rid[i] = j;        for(k=1;k<=j&&(rid[i-k]!=rid[i]-k);k++)             rid[i+k] = min( rid[i-k], rid[i]-k );        i += k;        j = max( 0,j-k );    }        // Max    int m = 0, pos;    for(int i = 1; i < (int)t.size(); i++){        if( m < rid[i]*2+(t[i]!='#') )            m = rid[i]*2+(t[i]!='#'), pos = i;    }    for(int i = pos-rid[pos]; i <= pos+rid[pos]; i++){        if( t[i] != '#' ) res += t[i];        }    return res;}int main(){string tar;string res,ret;char z;int pos=0;z=getchar();  while(getline(cin,tar)){if(z!='\n' && pos==0){tar.insert(tar.begin(),z);pos=1;}//cout<<tar<<endl;if(tar=="2013")break;ret=clear_space(tar);res=manacher(ret);if(res==ret || res==tar){cout<<"YES"<<endl;}elsecout<<"NO"<<endl;}return 0;}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.