牛客練習賽42(A,B)

2021-09-25 21:48:05 字數 2091 閱讀 8826

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

給定兩個等長的由小寫字母構成的串

a,ba,b,其中 |a|=|b|=n 。

現在你需要求出乙個子區間 [l,r]使得 lcp(a[l,r],b[l,r])×lcs(a[l,r],b[l,r])+lcp(a[l,r],b[l,r])+lcs(a[l,r],b[l,r]) 最大,並輸出這個值。

lcp(s,t)表示s和t的最長公共字首,lcs(s,t)表示s和t的最長公共字尾。

第一行乙個字串 aa。

第二行乙個字串 bb 。

一行乙個整數,表示答案。
示例1

aaabbbcccddd

aaaddddddddd

15

選擇 l=1,r=12 是一種可行的最優解。

對於所有資料,保證 n≤200000,串 a,b僅由小寫字母構成。

思路:一眼看是最長公共字首和最長公共字尾。但是稍微想一下,其實只需要求一次最長公共字首就行了,因為無論怎麼樣對於一段連續字串來說,最長字首和最長字尾是一樣的。

比如說aaabab和aaaccc,最優情況是選前三個字母aaa。

#includeusing

namespace

std;

#define ll long long

const ll mod = 100000007

;int dp[200000

];int

main()

else

a =max(a,dp[i]);

}ll ans = a*a*1ll + 2ll*a;

printf(

"%lld\n

",ans);}/*

aaabbbddccdd

aaaddddddddd

*/

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 524288k,其他語言1048576k

64bit io format: %lld

注意本題有模數

給定乙個 長度為 n 的序列  ,求:

max1≤i≤j≤nmod100000007

其中  ⊕表示異或

第一行乙個整數 n 。

第二行 n 個整數,表示 ai。

一行乙個整數 ans ,表示答案。
示例1

3

1 2 3

6

我們 顯然需要將所有的數字都選上顯然需要將所有的數字都選上,此時 ans=(1⊕2⊕3)+1+2+3=6。

對於所有的資料,保證

1≤n≤3×105,0≤ai<220。

樣例:想不到吧,你的做法至少能過樣例!

思路:沒啥好說的,對於乙個數a_i,即使前面出現過a_i這個數,大不了就是異或等於0,但是會再加上a_i,對ans貢獻肯定是增大的。所以選所有數就好啦。

#includeusing

namespace

std;

#define ll long long

const ll mod = 100000007

;int

main()

printf(

"%lld\n

",(s1+s2+mod)%mod);

}

時間限制:c/c++ 2秒,其他語言4秒

空間限制:c/c++ 524288k,其他語言1048576k

64bit io format: %lld

給定m個長為n的序列

a1,a2,…,am。

小z想問你:

n∑i1=1n∑i2=1…n∑im=1sum(a1,i1,a2,i2,…,am,im)mod1000000007

其中sum(乙個序列)sum(乙個序列)表示這個序列中所有不同的數的和,相當於先sort,

牛客練習賽42題解

寫題寫的感覺自己彷彿是個傻子 給定兩個等長的由小寫字母構成的串 a,b,其中 a b n 現在你需要求出乙個子區間 l,r 使得 lcp a l,r b l,r lcs a l,r b l,r lcp a l,r b l,r lcs a l,r b l,r 最大,並輸出這個值。lcp s,t 表示s...

牛客練習賽4 A B

laptop 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld fst是一名可憐的小朋友,他很強,但是經常fst,所以rating一直低迷。但是重點在於,他非常適合acm!並在最近的區域賽中獲得了不錯的成績。拿到獎...

牛客練習賽74AB

題目題意 符合等比數列等差數列等mod數列就是 牛 的數列 問給定數列是否為牛數列 思路 直接比較即可,很坑的地方是 等比數列必須考慮到公比不是整數的情況,但是也不能用double存因為後面要取模 include using namespace std const int maxn 100000 1...