時間限制 6000 ms
記憶體限制 65536 kb
mays王國的女王大人每天過著自由自在的生活,她最大的樂趣就是給鄰國的帥氣王子寫信。而負責給她送信的就是皇家小妹妹快遞公司。
今天負責給女王大人送信的是乙個新來的小妹妹,她非常好奇女王大人的信,於是悄悄的把它拆開來看了!但是機智的女王大人早就想到了會有這種情況發生,她和鄰國帥氣王子的信都是加密過的~
小妹妹研究了一路,她感覺,裡面重複比較多的內容應該是有用資訊。為了安慰自己的智商,小妹妹希望找到信的乙個最長連續的子串,這個子串出現2次或以上。為了能找到的子串盡可能長,小妹妹認為即便出現的2次有一部分重疊也是可以的。
輸入第一行為資料組數t(t<=10),每組一行字串str,str中只包含小寫字母,且長度不超過2000。
每組答案輸出一行。
2
aabbaabbaa
abcde
6
0
賽中提交:tt
賽後ac:y
題目大意:
給乙個字串,找出乙個「最長的在母串中存在相同串的子串」
思路與反省:
這次使用了樸素查詢的演算法,再加上乙個小優化
即i和j的迴圈先遍歷兩個串的起點,i從0開始,j從i+1開始
第三層迴圈再用k去遍兩個串的長度
小優化是」當當前找到的子串最大長度已經大於當前迴圈可能達到的最大長度後「就終止迴圈
用了樸素還是t了的原因就是只在i的迴圈中加了優化,而沒有在j中加優化
後來加了就過了
賽中用字典樹提交了一次t,
然後用樸素演算法提交了一次t。
賽後重新寫了一遍樸素演算法提交了一次t,
然後改了乙個小細節就就ac了。
下面是ac**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 500005
using namespace std;
int main()
; getchar();
scanf("%s",str);
int maxlen=0;
int length=strlen(str);
//printf("length is:%d\n",length);
for(int i=0;length-i-1>=maxlen;i+=1){
//printf("(%d %c)\n",i,str[i]);
for(int j=i+1;length-j-1>=maxlen;j+=1){
if(str[j]==str[i]){
int len=1;
for(int k=1;j+k
暑期個人賽 第五場 C
時間限制 1000 ms 記憶體限制 65536 kb 給定乙個字串,求它的乙個重排,使得沒有兩個相鄰字元相同。第一行乙個整數t,表示組數 t 10 接下來的t行,每行乙個字串s,s中只包含小寫字母,s的長度不大於1e5.若符合條件的重排存在,輸出字典序最小的乙個。若不存在,輸出 1。2 aabbc...
暑期個人賽 第二場 C
時間限制 1000 ms 記憶體限制 65536 kb 現有一段橫向長度為n的山脈,其中每段有乙個獨一無二的高度hi 1到n之間的正整數 現在你想知道對於長度為n的山脈,可能有這樣的山脈多少種。這樣的山脈是 某個位置要麼比兩邊的高度都低,要麼比兩邊的高度都高。兩座山脈 a和 b 不同當且僅當存在乙個...
暑期個人賽 第四場 C
時間限制 1000 ms 記憶體限制 65536 kb 崔逗逗放假回家後每天只能吃飯睡覺打豆豆感覺好無聊,該怎麼給自己找找樂子呢?於是他主動去幫鄰家初中小妹妹做作業。他看到了這樣一道題 在乙個邊長為a 0 a 10001 的正方形abcd中,分別以a b c d為圓心做半徑為a的四條弧,如圖。求標號...