時間限制: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
aaabbbcccdddaaaddddddddd
15
選擇 l=1,r=12 是一種可行的最優解。
對於所有資料,保證 n≤200000,串 a,b僅由小寫字母構成。思路:一眼看是最長公共字首和最長公共字尾。但是稍微想一下,其實只需要求一次最長公共字首就行了,因為無論怎麼樣對於一段連續字串來說,最長字首和最長字尾是一樣的。
比如說aaabab和aaaccc,最優情況是選前三個字母aaa。
#includeusingnamespace
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
31 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貢獻肯定是增大的。所以選所有數就好啦。
#includeusingnamespace
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...