1. 程式人生 > 實用技巧 >Balls of Buma(迴文串)

Balls of Buma(迴文串)

Balph正在學習玩名為Buma的遊戲。在這個遊戲中,給他一行綵球。他必須選擇一個新球的顏色和插入它的位置(在兩個球之間,或者在所有球的左邊,或者在所有球的右邊)。
當插入球時,會重複發生以下情況:如果由於先前的動作,相同顏色的球部分變得更長,並且其長度至少變為3,則該部分的所有球都將被消除。
例如,考慮一排“ AAABBBWWBB”球。假設Balph選擇了一個顏色為“ W”的球,並將其插入第六個球i之後的位置。 e。在兩個“ W”的左側Balph插入該球后,將消除顏色為“ W”的球,因為該線段已變長並且現在的長度為3,所以該行變為“ AAABBBBB”。現在消除了顏色“ B”的球,因為顏色“ B”的球段變長了,現在長度為5。因此,該行變為“ AAA”。但是,現在沒有任何一個球被消除,因為沒有細長段。
幫助Balph數出選擇新球的顏色以及將其插入的地方可以消除所有球的可能性的數量。
輸入
唯一的行包含一個非空的大寫英文字母字串,其長度最大為3×105。每個字母代表一個具有相應顏色的球。
輸出
輸出選擇顏色和新球位置以消除所有球的方式數量。

【樣例1】
BBWWBB
【樣例2】
BWWB
【樣例3】
BBWBB
【樣例4】
OOOWWW
【樣例5】
WWWOOOOOOWWW

樣例輸出Copy

【樣例1】
3
【樣例2】
0
【樣例3】
0
【樣例4】
0
【樣例5】
7


問題解釋:就是要加入一個字母使得全部字母消失(消失就是,如果那個相同字母部分變得更長
並且其長度至少變為3,則該部分的所有球都將被消除。
例如BBWWBB加入一個W使的W增多並且W個數多餘3,消去W,變成BBBB,B變多,且多於3個

思路就是:
把相同的合併變成BWB判斷是不是迴文串(關於中間的那個對稱),並且對稱的兩個相等
且對稱的兩個相加大於三。注意偶數個不行
#include<bits/stdc++.h>
using namespace std;
struct node{
    char type;
    int num;
    node()
    {
        num=0;
    }   
}st[300010];
int main()
{
    string str;
    cin>>str;
    int s=1;
    st[1].type=str[0];
    st[1].num=1;
    for(int i = 1;i < str.size();i++)
    {
        if
(str[i]==st[s].type) st[s].num++; else { st[++s].type = str[i]; st[s].num = 1; } } /*for(int i=1;i<=s;i++) { cout<<st[i].type<<" "<<st[i].num<<endl; }*/ if(s%2==0){ puts("0"); } else{ for(int l=1,r=s;l<r;l++,r--) { if(st[l].type!=st[r].type) { cout<<0<<endl; return 0; } else if(st[l].num+st[r].num<3) { cout<<0<<endl; return 0; } } if(st[s/2+1].num<2) { cout<<0<<endl; return 0; } else{ cout<<st[s/2+1].num+1<<endl; } } return 0; }