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...