喵星球上的點名

2021-08-01 13:39:37 字數 1084 閱讀 5287

a180285幸運地被選做了地球到喵星球的留學生。他發現喵星人在上課前的點名現象非常有趣。

假設課堂上有n個喵星人,每個喵星人的名字由姓和名構成。喵星球上的老師會選擇m個串來點名,每次讀出乙個串的時候,如果這個串是乙個喵星人的姓或名的子串,那麼這個喵星人就必須答到。

然而,由於喵星人的字碼過於古怪,以至於不能用ascii

碼來表示。為了方便描述,a180285決定用數串來表示喵星人的名字。

現在你能幫助a180285統計每次點名的時候有多少喵星人答到,以及m次點名結束後每個喵星人答到多少次嗎?

本題是ac自動機模板題,注意點見下,第二次打,不太習慣。

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,m;

int u,v,w;

#define per(i,a,b) for(int i=a;i<=b;i++)

vector

name[100001];

struct ak_automic_machine

void add(int x)

num[p].push_back(x);//push_back編號,別push_back長度

}void ak_begin()}}

void query(int x)

}temp=fail[temp]; } }

}}ac;

int main()

name[i].push_back(-233);

scanf("%d",&len);

per(j,1,len)

}per(i,1,m) ac.add(i);

ac.ak_begin();

per(i,1,n) ac.query(i);

per(i,1,m)printf("%d\n",ac.ans2[i]);

per(i,1,n)printf("%d ",ac.ans1[i]);

}

SCOI2012 喵星球上的點名

有n個串,代表n個人的姓氏和名字,都是用很多個數字表示的,比如我姓1,2,3,4,名4,5,6,7。然後有m個點名串,如果點到了某個人的姓或名裡面的某一串,那個人就被點到,不過乙個人在乙個點名串中只能被點一次。比如點名串是2,3,4,我的姓中含有2,3,4,那麼我就會被叫到。求每個學生分別被叫到多少...

SCOI2012 喵星球上的點名

給出n個模式串,m個文字串,每個模式串由兩部分組成,我們認為乙個模式串被乙個文字串包含只要這個文字串包含它的兩部分中的其中一部分的子串。求每個文字串包含多少個模式串,每個模式串又被多少個文字串包含。1 n 20000,1 m 50000,模式串總長和文字串的總長分別不超過100000 保證模式串和文...

SCOI2012 喵星球上的點名

對於第乙個詢問,對於姓名串建廣義字尾自動機,那麼我們對於插入乙隻喵的姓名串,要將這兩個 姓和名 串的所有字串位置打標記,怎麼搞呢,其實可以直接插入暴力向上跳,複雜度的話 對於乙個串假設長度為x,那麼插入複雜度是min x x,x n 而最多只有n x個這樣的串,算一下總的複雜度上界是n根號的。然後就...