4084 Sdoi2015 雙旋轉字串

2021-08-08 05:53:58 字數 999 閱讀 9516

description

給定兩個字串集合 s 和 t 。其中 s 中的所有字串長度都恰好為 n ,而 t 中所有字串長度都恰好為 m 。

且 n+m 恰好為偶數。如果記 s 中字串全體為 s1,s2,…,stotals ,而 t 中字串全體為 t1,t2,…,tt

otalt 。現在希望知道有多少對

hash 給大的集合中的每個字串 把一段按mid分成兩段 ,然後看看要是匹配的話需要小串是什麼。。

然後需要的小串用個map記錄一下就好了。。

最後累加很簡單

code:

#include

#include

#include

#include

#include

typedef long long ll;

using namespace std;

const int mod=10037;//乘的東西

const int mod1=1000000007;

const int n=4000005;

int s,t,n,m,o;

char ss[n],s1[n];

ll shen[n];//前i為的hash值

ll kk,kkk;

map q;

struct qq

s[n*2];int cnt=0;

bool cmp (qq a,qq b)

void add ()

sort(s+1,s+1+cnt,cmp);s[0].x=-1;

for (int u=1;u<=cnt;u++)

if (s[u].x!=s[u-1].x)

q[s[u].x]++;

}int main()

int ans=0;

for (int u=1;u<=t;u++)

printf("%d\n",ans);

return

0;}

4084 Sdoi2015 雙旋轉字串

time limit 10 sec memory limit 512 mb submit 394 solved 161 submit status discuss 給定兩個字串集合 s 和 t 其中 s 中的所有字串長度都恰好為 n 而 t 中所有字串長度都恰好為 m 且 n m 恰好為偶數。如果記...

SDOI2015 道路修建

傳送門 線段樹維護最小生成樹。兩個結點合併就是把兩個結點之間的兩條橫邊加上後形成乙個環,然後剪掉環上的最大值即可得到當前最小生成樹。不會證 於是現在只需要考慮怎麼找最大值。首先這個環一定是如下構成 兩邊是左節點的最右豎邊和右節點的最左豎邊,然後中間是所有的上下兩行橫邊。如下圖紅色部分。那麼發現維護每...

SDOI2015 尋寶遊戲

乙個 n n le10 5 個點的帶邊權的樹,初始每個結點都是白色。m m le10 5 次操作,每次將乙個點塗黑 白,問包含所有黑點的最小權連通塊。用set以dfs序為序維護所有黑點,答案即為set內相鄰結點距離和 頭尾結點距離。include include include include in...