20180711模擬賽T3 聚變

2022-05-13 18:13:54 字數 2680 閱讀 4946

檔名:fusion

題目型別:傳統題

時間限制:3秒

記憶體限制:256mb

編譯優化:

知名科學家小a在2023年在計算機上實現了模擬聚變的過程。

我們將她研究的過程簡化。

核子共有26種,可以用a到z共26個字母表示。

核子聚變的過程可以用乙個字串描述。

按照順序從左到右的順序,假如有兩個相同核子相鄰,兩個核子就會相互吸引發生聚變生成乙個序號+1的核子,特殊的,兩個z核子相鄰會湮滅沒有新的核子生成。

每當兩個核子聚變時,就需要重新從左到右重複找到兩個相鄰的相同核子直到不存在為止。

比如zyzzy->zyy->zz->

小a為了做出足夠有效的實驗,每次會從乙個字串中選定乙個子串操作。

她想要知道每次實驗這個子串中的核子能否最終全部湮滅。

輸入格式

第一行乙個只有小寫字母的字串。

第二行乙個數\(n\)表示詢問次數

接下來\(n\)行每行兩個正整數\(l_,r_\)表示詢問區間

輸出格式

對每次詢問輸出一行yes或no表示答案

樣例輸入

yzyyyzyzyyyz

81 6

7 12

1 12

6 11

1 11 3

4 93 8

樣例輸出
yes

yesyes

yesno

nono

no

l表示字串長度

對於30%的資料滿足l<=100

對於60%的資料滿足l<=3000,n<=3000

另存在20%資料滿足字串中只存在y,z

對於100%的資料,l<=500000,n<=1000000

開始沒看到「從左往右」,還以為是線段樹維護分治……

\(nl\)大力60。

我們發現對於一段合法串,我們可以把它分成多個(或乙個)連續的合法字串。

比如:

zyyzyyyyz
我們可以分成:

zyy | zyy | yyz
這三段都是合法的,所以原串也是合法的。

又比如說:

zyyyyzyz
我們把它分成:

zyy | yyz | yz
顯然,yz是不合法的,所以原串是不合法的。

於是我們檢驗時,我們可以讓指標跳著走:

zyy | yyz | yz

^zyy | yyz | yz

---->^

zyy | yzz | yz

---->^

zyy | yzz | yz

---->^

發現指標跳到外面去了,所以說是不合法的。

不難想到用乙個nxt陣列表示以第i個開始的最短合法串末尾的下乙個位置(感覺很像kmp)。

那麼怎麼求nxt呢?

我們需要引入乙個to陣列。

to[i][j]表示從第i位開始最短能拼成j字元的位置的下乙個位置(\(j = 0\sim 26\),\(0\)表示\(a\),\(26\)表示沒有)。

不難發現to[i][j] = to[to[i][j-1]][j-1]nxt[i] = to[i][26]

當然,開始時tonxt都指向結尾的後面。

然而我們發現這樣做會被hack:

xzzxyz

這是因為對於第乙個z來講它只更新了\(25\sim 26\)的情況,所以第乙個第乙個xnxt會指向末尾。

所以我們需要排除中間這段zz的干擾。

於是我們又想到轉移方程:to[i][j] = to[nxt[i]][j]

這樣就大功告成了。

然而這樣做很容易被卡掉,比如說全是z的情況,往後跳的速度會很慢。

所以我們選擇倍增。

下面是**:

#include #include const int maxn = 500005;

char aa[maxn];

int nxt[maxn][21];

int to[maxn][26];

inline void pre()

for(int i = len - 1; i >= 0; --i) }

inline bool pan(int l, int r)

return false;

}int main()

fclose(stdin);

fclose(stdout);

return 0;

}

YCH的模擬賽 T3

暴搜或者字典樹,但是因為輸出所有的方案而不是方案數,不管什麼做法都逃不過輸出,所以都差不多 sol1 記憶化搜尋 當列舉方案時,f i 表示已經把字串的前i個字母都拼好的情況下有多少方案 考慮從第i 1個字元開始到j是乙個給定的單詞 如果有這樣的j的話就可以轉移 然後開乙個vector把每乙個狀態下...

NOIP歡樂模擬賽 T3 解題報告

3 小澳的葫蘆 calabash.cpp c pas 題目描述 小澳最喜歡的歌曲就是 葫蘆娃 一日表演唱歌,他盡了洪荒之力,唱響心中聖歌。隨之,小澳進入了葫蘆世界。葫蘆世界有n個葫蘆,標號為1 n。n個葫蘆由m條藤連線,每條藤連線了兩個葫蘆,這些藤構成了一張有向無環圖。小澳爬過每條藤都會消耗一定的能...

熱身賽T3(獎學金評定)

zpy 學習非常努力,想要評獎學金,而獎學金評定的一大標準就是績點 gpa 高低。單個科目的 gpa 的計算公式如下 f x min 5.0,x 45 0.1 其中 x 表示課程成績,眾所周知當 x 60 時 f x 0 在評定獎學金時用的是平均學分績點,簡而言之就是以學分為權重的績點。假設你考了三...