1.hdu--4513 吉哥系列故事——完美隊形ii
題意:中文題不解釋
思路:數字型的manachar演算法。將模板中的比較字元改為比較數字就行了。
ac**:
1 #include 2 #include3 #include4 #include 5 #include 6view codeusing
namespace
std;
7int a[200005],p[200005],k[200005];8
int manachar(int
len)925
if(p[i]>maxn)
26 maxn=p[i];27}
28 printf("
%d\n
",maxn-1
);29
return0;
30}31int
main()
3250
else
51 k[i*2+2]++;
52//
printf("%d %d\n",i*2+2,k[i*2+2]);53}
54 manachar(2*n+2
);55}56
}57return0;
58 }
2.hdu--3294 girls' research
題意:先輸入乙個字元ch表示該字元的real是『a』,迴圈對應的ch-1的real是『z』,再輸入乙個字串,求這個字串real值的最大回文串,如果有多個結果輸出第乙個。輸出最大回文串的左端點值和右端點值,如果回文串長度是1的話列印「no solution!」
思路:先把給的字串改成real串,再求最大回文串,並記錄real串的左右端點。
ac**:
1 #include 2 #include3 #include 4 #include 5 #include 6view codeusing
namespace
std;
7char ch,s[200005],str[400005];8
int p[400005];9
int manachar(int
len)
1027}28
if(maxn
2933
}34 maxn--;
35if(maxn<3
)36 printf("
no solution!\n");
37else
3844
return0;
45}46int
main()
4762 str[len*2+2]='\0'
;63 manachar(len*2+2
);64}65
return0;
66 }
3.hdu--3613 best reward
題意:先輸入『a』~『z』的價值,然後給出乙個字串,問把這個字串分成兩部分,如果這一部分是回文串則把總價值加上這部分串的價值,求最大的總價值
思路:先把給出的串的總價值進行累加放入陣列中,然後對模式串給出的查詢串用manachar演算法進行計算,如果當前查詢到的ilen/2並且p[i]==len-i時,就max(ans,num[n]-num[n-p[i]+1]
),如果ansac**:
1 #include 2 #include 3 #include 4 #include 5 #include 6view codeusing
namespace
std;
7const
int maxn=500005;8
char s[maxn],str[maxn<<1];9
int num[maxn],k[maxn<<1],p[maxn<<1
];10
int manachar(int len,int
n)11
28if(i2&&p[i]==i)
2933
else
if(i>len/2&&p[i]==len-i)
3438}39
for(int i=1; i2; i++)
40if(k[i]==k[len/2+i-1]&&k[i]!=0)41
45 printf("
%d\n
",ans);
46return0;
47}48int
main()
4967 manachar(len*2+2
,len);68}
69}70return0;
71 }
4.poj--3974 palindrome
題意:給出一系列字串以「end」結束,問每個字串的最大回文串的長度
思路:manachar演算法直接算。
ac**:
1 #include 2 #include3 #include4 #include 5 #include 6view codeusing
namespace
std;
7int p[2000005];8
char s[1000005],str[2000005];9
int manachar(int
len)
1026 maxn=max(maxn,p[i]);27}
28 printf("
%d\n
",maxn-1
);29
return0;
30}31int
main()
3246 str[len*2+2]='\0'
;47 printf("
case %d:
",t++);
48 manachar(len*2+2
);49}50
return0;
51 }
排序演算法小結
1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...
KMP演算法小結
posted on 2011 06 14 byhuangchao 主要看了這裡,感覺講的十分的不錯,總結一下。首先宣告要搜尋的串為s,設長度為n,要匹配的串為m,設長度為m.先考慮暴力的演算法,暴力的演算法是遍歷s的每乙個字元,然後從這個字元開始和m串進行匹配。時間複雜度為o nm 怎麼在此基礎上進...
排序演算法小結
1 歸併排序 3.區別與聯絡 遞迴是從未知推到已知,相當於把未知的東西壓入棧,等到可以算出結果了,就一步一步出棧。迭代是從已知到未知,從已知的東西一步一步推至目標。遞迴與迭代就好像一對逆元。遞迴的 更加清晰,但開銷更大,也更容易出錯,除錯較困難 而迭代的 編寫更困難,但速度和開銷較小。4.空間占用 ...