牛牛在書上看到一種字串叫做回文串,當乙個字串從左到右和從右到左讀都是一樣的,就稱這個字串為回文串。牛牛又從好朋友羊羊那裡了解到一種被稱為優美的回文串的字串,考慮乙個長度為n只包含大寫字母的字串,寫出它所有長度為m的連續子串(包含所有可能的起始位置的子串,相同的子串也要計入),如果這個字串至少有k個子串都是回文串,我們就叫這個字串為優美的回文串。現在給出乙個n,牛牛希望你能幫他計算出長度為n的字串有多少個是優美的回文串(每個位置都可以是』a』~'z』的乙個。)
這道題一開始沒有想到很好的思路能夠較小列舉的數量,後來在牛客網的討論區上看到了乙個同學的**,不得不感嘆思路的巧妙。
總結來說,就是將所有可能的情況模式化,比如回文串abbba,accca,bcccb等都滿足有兩個m=2的回文子串,可以看出其實他們的模式都是01110,而如果我們逐個去列舉的話,數量達到26*25,所以找出滿足條件的模式,然後根據模式進行排列組合就會大大的減少資料量。
比如n=3的模式,可以有(表示三個都完全相同),(前兩個和後乙個不同),等等,每找到乙個滿足條件的模式,就加上對應的排列數量(可以根據不同的個數找到對應的排列)。
#include
#define n 12
using
namespace std;
int pattern[n]
;int n,m,k;
unsigned
long nums[n]
;unsigned
long ans=0;
bool
check
(int from)
bool
check()
void
dfs(
int pos,
int num)
for(
int i=
0;i) pattern[pos]
=num;
dfs(pos+
1,num+1)
;}intmain()
優美的01串
1002 優美的01串 time limit 1 sec memory limit 128 mb 64bit io format lld submitted 519 accepted 182 submit status web board description 最近,byte對01字串很感興趣。一...
優美的閃電
一開始的思路是 當前剩餘權值最大的那個區間一定要被一發能 量為該區間權值的飛彈打掉,所以我們列舉該飛彈擊打位置,同 時我們刪除所有能被該飛彈擊打掉的區間,但是這只針對樣例,對於題目的其他資料就是不成立的。正確的是使用區間 dp,fi,j 表示座標被 i,j 完全包含 的區間最小需要花費的能量。則可以...
優美的句子
只言片語,溫暖人心 不亂於心,不困於情。如此,安好。不開心時,記得要讓心情轉個彎。出發去拾起,夢裡車輪碾過的風景。晨鐘淡淡,喚起一天的生機。丟掉煩惱,日子才能風輕雲淡。打足精神,讓今天成為最棒的一天。分享快樂,福己及人。皓月當空,清風徐徐,盡情享受。回首忙碌日,假期更顯貴。開心了就笑,不開心就過會再...