字串函式 strfun

2021-08-29 18:30:14 字數 1153 閱讀 9179

兩個等長的由大寫英文本母構成的字串a和b,從a中選擇連續子串x,從b中選出連續子串y。子串x與子串y的長度相等。

定義函式f(x,y)為滿足條件xi=yi(1<=i<=|x|)的i的個數,計算f(x,y)的數學期望。

第一行輸入n(1<=n<=2*10^5),表示a和b的長度

第二行輸入字串a

第三行輸入字串b

輸出乙個實數表示f(x,y)的期望,答案保留6位小數。   

【樣例解釋】

考慮第乙個樣例,x,y的選擇有5種情況分別是("a","b"),("a","a"),("b","b"),("b","a"),("ab","ba")其中,第2對和第3對所對應的f(x,y)等於1,其他都是0,由於選擇每一對的概率都是1/5,所以f(x,y)的期望為1/5*0+1/5*1+1/5*1+1/5*0+1/5*0=2/5=0.4

solution

上面的乙個a(位置為i)與下面的乙個a(位置為j)

貢獻為min(i,j)*min(n-i+1,n-j+1)

例如xxa***x

***a***

貢獻為min(3,4)*min(4,5)=3*4=12

考慮算答案

把對於每乙個字元,把a串字首和起來,同理也做一遍字尾和

掃一遍b串統計即可

比如上面那個例子

a串的字首0033333

a串的字尾5550000(暫時沒有用到)

#include#include#include#include#include#include#define ll long long

#define maxn 200005

using namespace std;

int n;

double sl[maxn][27],sr[maxn][27],ans;

char a[maxn],b[maxn];

int main()

for(int i=n;i>=1;i--)

for(int i=1;i<=n;i++)

double aa=((double)ans*6.0)/(double)n/(double)(n+1)/(double)(2*n+1);

printf("%.6lf\n",aa);

return 0;

}

字串和字串函式

字元輸入輸出 getchar putchar ch getchar putchar ch 字串函式 字串輸入 建立儲存空間 接受字串輸入首先需要建立乙個空間來存放輸入的字串。char name scanf s name 上述的用法可能會導致程式異常終止。使用字串陣列 可以避免上述問題 char na...

字串和字串函式

1.字串字面量 字串常量 用雙引號括起來的內容稱為字串字面量,也叫字串常量。字串常量屬於靜態儲存類別,這說明如果在函式中使用字串常量,該字串只會被儲存一次,在整個程式的生命期內存在,計時函式被呼叫多次。用雙引號括起來的內容被視為指向該字串儲存位置的指標。hello 中的 hello 類似於乙個陣列名...

字串函式

1 獲取字串的長度 length 2 判斷字串的字首或字尾與已知字串是否相同 字首 startswith string s 字尾 endswith string s 3 比較兩個字串 equals string s 4 把字串轉化為相應的數值 int型 integer.parseint 字串 lon...