18ICPC南京M 字串

2022-05-20 01:42:44 字數 2505 閱讀 5741

題意:在s串中找乙個子串,在t串中找乙個字首,求拼起來是回文串的方案種數。

首先s串取出來的串可以分為s1 + s2,t串取出來的字首為t,其中s1與t拼起來為回文串,s2本身為回文串

所以說對於s2,可以用馬拉車預處理出s串中每個下標作為起點可以產生的回文串的數量。

對於s1可知s1的逆序與t相同,所以將s串翻轉,用exkmp求出每個字尾對t的lcp

最後兩者貢獻相乘就是答案。

賽後總結:

1.因為這題開在最大流和最小球覆蓋後面,下意識認為應當是回文樹或者字尾自動機才能做的字串題,由於還沒學到的原因產生了怯意

2.事實上開了一會兒之後發現並不是不可做,前一部分處理s2回文串的貢獻在比賽的時候已經敲出來了,但是後一部分因為沉迷模擬樣例aabbaa和aabb,s的逆序還是s,所以迷惑了做題的方法,下次應當自己搞乙個比較普遍的樣例、

3.總結起來 是字串做的不夠多

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define for(i, x, y) for(int i=x;i<=y;i++)

#define _for(i, x, y) for(int i=x;i>=y;i--)

#define mem(f, x) memset(f,x,sizeof(f))

#define sca(x) scanf("%d", &x)

#define sca2(x,y) scanf("%d%d",&x,&y)

#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define scl(x) scanf("%lld",&x)

#define pri(x) printf("%d\n", x)

#define prl(x) printf("%lld\n",x)

#define clr(u) for(int i=0;i<=n;i++)u[i].clear();

#define ll long long

#define ull unsigned long long

#define mp make_pair

#define pii pair#define pil pair#define pll pair#define pb push_back

#define fi first

#define se secondtypedef vector

vi;int read()

while (c >= '

0'&&c <= '

9')return x*f;}

const

double pi = acos(-1.0

);const

double eps = 1e-9

;const

int maxn = 1e6 + 10

;const

int inf = 0x3f3f3f3f

;const

int mod = 1e9 + 7

;int

n,m,k;

char

s[maxn],t[maxn];

char ma[maxn << 1

];int mp[maxn << 1

];ll pre[maxn

<< 1

],val[maxn];

ll nxt[maxn],extend[maxn];

void manacher(char s,int

len)

ma[l] = 0

;

int mx = 0,id = 0

;

for(int i = 0; i < l ; i ++)

}}void init(char* str,int

l)

int cnt = 0

;

for(int i = 1; i < l * 2 + 2; i ++)}//

cout << l << " " << cnt for(int i = 0 ; i < l; i ++)

}void pre_ekmp(char x,int

m,ll next)

}}void ekmp(char x,int m,char y,int

n,ll next,ll extend)

}}int

main()

prl(ans);

return0;

}

陣列與字串 1 8

假定有乙個方法issubstring,可檢查乙個單詞是否為其他字串的字串。給定兩個字串s1和s2,請編寫 檢查s2是否為s1旋轉而成,要求只能呼叫一次issubstring。比如,waterbottle是erbottlewat旋轉後的字串。分析 將兩個s1拼接起來,呼叫issubstring確定s2...

18 字串 char型字串

1 什麼是字串?字串是以空字元 0 結尾的字元陣列。空字元的assii碼為 0,空格的ascii碼為32 2 0的作用 0 是乙個空字元標誌,它的assii碼為0,c 有好多處理字串的函式,都以 0 為結束標記。也就是以空字元為結束標記,比如cin,cout。它們都以空字元為結束標記,他們在遇到空字...

careercup 陣列和字串1 8

1.8 假定有乙個方法issubstring,可檢查乙個單詞是否為其他字串的子串。給定兩個字串s1和s2,請編寫 檢查s2是否為s1旋轉而成,要求只能呼叫一次issubstring。旋轉字串 waterbottle 是 erbottlewat 的旋轉字串。題目說我們使用一次issubstring函式...