檔名:fusion知名科學家小a在2023年在計算機上實現了模擬聚變的過程。題目型別:傳統題
時間限制:3秒
記憶體限制:256mb
編譯優化:無
我們將她研究的過程簡化。
核子共有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
yesl表示字串長度yesyes
yesno
nono
no
對於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]
。
當然,開始時to
與nxt
都指向結尾的後面。
然而我們發現這樣做會被hack:
xzzxyz這是因為對於第乙個
z
來講它只更新了\(25\sim 26\)的情況,所以第乙個第乙個x
的nxt
會指向末尾。
所以我們需要排除中間這段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 在評定獎學金時用的是平均學分績點,簡而言之就是以學分為權重的績點。假設你考了三...