題意:在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函式...