FJUT 這還是一道數論題

2022-08-14 08:15:13 字數 1927 閱讀 2666

timelimit:4000ms  memorylimit:128mb

64-bit integer io format:%lld

special judge

problem description

最後來個字串簽個到吧,這題其實並不難,所需的演算法比較基礎,甚至你們最近還上過課。

為了降低難度,免得所有人爆零。這裡給幾個提示的關鍵字 :字串,回文,二分,雜湊. 注意要對奇偶回文分開二分

這樣還不會做,說明基礎有所欠缺。

給你乙個字串a和乙個字串b,請你求乙個滿足以下要求的所有字串中,最長的字串c的長度:

c必須同時是a和b的子串,即a和b中都必須存在乙個子區間和c長得一樣

c必須是乙個回文,即正過來讀和反過來讀都一樣

input

多組資料,請處理到eof

每組資料報含,兩行,每行都是僅由小寫字元構成的字串,代表a和b。

對於30%的資料。

保證|a|,|b|<=1000,且單個檔案的字元總數小於10000

對於100%的資料

保證|a|,|b|<=100000,且單個檔案的字元總數小於2e6

其中70%的資料答案為奇數哦

因為沒有處理掉字串尾巴上多餘的'\r',所以為了防止讀到'\r' 推薦使用scanf("%s");

output

輸出c的長度

sampleinput

bbabbbcbcbbbddde

bbbabbbccadddbbba

dggdgzz

dggdbb

aaabbb

acbdbca

bcadacb

sampleoutput

540

1

hint:

對於第乙個資料c取bbabb

對於第二個資料c取dggd

用馬拉車預處理,這樣可以o(1)判斷任意區間是否是回文。 然後就是用二分答案的長度,用雜湊o(n)計算是否有長度為len的公

共回文子串,注意。  二分時奇偶回文要分開二分。因為如何有2k+2長度的公共回文。肯定也會有2k長度的公共回文,但是不保證也

有2k+1的長度的公共回文。。資料裡70%的答案是奇的。所以你只二分奇數長度即可得到70分. 如果不想奇偶分開討論的話,可以用馬拉車的技巧,轉化為全部都是奇回文

細節在**中有解釋

#includetypedef unsigned long long ull;

const int maxn=100005;

const ull p=131;

using namespace std;

char str1[maxn],str2[maxn];

ull f1[maxn],f2[maxn],p[maxn];

int len1,len2,tmp_len;

int len[maxn<<1];

char tmp[maxn<<1];

void init()

ans=max(ans,len[i]);

}}map< ull,int >mp;

bool cheak(int m)

}for(int i=0; str2[i+m-1]; i++) ///列舉第二個字串的起點

}return false;

}int main()

else

}ans=max(ans,l*2);

l=l-1,r=min(len1,len2)/2+1;

while(l+1else

}ans=max(ans,l*2+1);

printf("%d\n",ans);

}return 0;

}

一道數論題目

有100盞燈,編號1 100,初始時都是亮著燈。有一百個小孩,編號1 100。每盞燈對應乙個開關,按下時燈亮,再按則燈滅。讓這一百個小孩依次按開關,每個小孩只能按其編號倍數的開關。比如1號小孩可以按所有開關,2號小孩只能按編號為偶數的開關,以此類推。請問所有的小孩都按過開關以後 注意 每個小孩都必須...

一道神奇的數論題

題面 時間限制 3 s 記憶體限制 256 mb lc出去浪,發現了一大堆鑽石,可是鑽石在有規律地消失,lc想知道最後剩下鑽石的價值。給出p 1堆鑽石,第i堆鑽石含有i 1個不同的鑽石.第i堆鑽石有1 i i 1 的概率不消失,每個鑽石不消失的概率為1 2,第i堆每個鑽石權值為2 i 1 求最後獲得...

hdu 1695 一道綜合性很強的數論題

這題想了好久,也打了好久。挺不錯的一道數論題。題目是要求兩個集合 1.b,1.d 中有多少對數的最大公約數為k,此問題等價於求兩個集合 1.b k,1.d k 中有多少對數互質。不妨設b 1.b 與 1.b 中有多少對數互質 1.b 與 b 1.d 中有多少對數互質 問題1就是尤拉函式的應用,就不詳...