題意:找到所有的回文串滿足它的前一半也是回文串。
思路:回文自動機 + 樹上倍增
我們要處理兩件事情,第一件是每種回文串出現了多少次。我們回想回文自動機的構造過程,發現fail指標只會由標號大的指向標號小的。這樣我們只需要標號從大到小遍歷即可處理出每種回文串出現的次數。
第二件是倍增的寫法,倍增是不需要初始化的因為我們只需要保證 mn[ x ][ 0 ]是對的,後面遞推出來的一定是對的。還有根的mn[ root ][ 1 ] ...... mn[ root ][ 20 ]也得是對的。
#include using namespace std;
typedef long long ll;
const int maxn = 300005;
char str[maxn];
ll ans[maxn];
struct pam
}int getfail(int x)
void add(int t)
last=ch[cur][t];
cnt[last]++;
}void count()
}for( int i = 2;i <= tot;i++ )
}for( int i = tot;i >= 2;i-- )
int res = 0;
for( int i = 2;i <= tot;i++ )
}if( len[p] == (len[i]+1)/2 )}}
}g;int main()
g.count();
printf("%lld",ans[1]);
for( int i = 2;i <= len;i++ )
puts("");
}return 0;
}
2019杭電多校第二場
今天也是一條鹹魚orz 場上三題 e,j,k e everything is generated in equal probability 題解 乙個長度為n的排列的逆序期望為c n,2 2 因為每一對下標的貢獻都是1 2.然後設dp i dp i dp i 為長度為i ii的隨機排列的culcul...
2019杭電多校第二場
給定乙個 n 從 1,n 中等概率取出乙個數,再等概率生成乙個 n 的全排列,再計算這個全排列的函式值,求這個函式值的期望。函式表達為輸入乙個全排列,計算其逆序數,再等概率取出乙個子串行 可以是空,可以是原序列 遞迴計算該子串行的函式值,累加返回。include using namespace st...
2018暑假杭電多校第二場
問了yxz後做的。這個是我一般寫線段樹的方法,才覺得感覺有點麻煩,還是yxz的寫法安逸些 include bits stdc h define out x cout x typedef long long ll const ll maxn 5e5 5 int n,m int b maxn struc...