2018牛客暑假多校三 E(KMP運用)

2021-08-21 19:26:28 字數 539 閱讀 1482

給你乙個字串s,你要對字串s的每一位i將前i位的字串移動到尾部形成乙個新的字串,如果形成的字串相同則歸為一類li。現在讓你將li類按照字典序排序,並讓你輸出每一類的數量和每一類中字串對應的下標i。

觀察可以發現,將字串移動形成新的字串,當且僅當字串中存在迴圈節時,才會出現新構成的字串相同。因此這個問題就轉化成求乙個字串的迴圈節的問題。

至此,這個問題就可以用kmp中的next陣列進行計算。(有乙個重要結論,如果對於乙個長度為l的字串,如果l%(l-next[l])==0則代表它具有迴圈節,且迴圈節的長度為l-next[l])

#include #define maxn 1000005

using namespace std;

int nex[maxn];

char str[maxn];

void get_next(char *s)

}int main()

}else

puts("");}}

return 0;

}

2018牛客暑假多校二 D(貪心)

你要按照順序以此經過n個商店,每到達乙個商店你可以購買一件物品,也可以 你手中的商品。同一時刻你手上最多拿一件商品。在第i個商店購買和 的代價都是a i 問你經過完n個商店後的最大收益。同時,在最大化收益的前提下,求最小的交易次數。不難發現,要想使得利益最大,我們肯定是要在乙個單調區域中的最小值中購...

2018暑假牛客多校二 C(凸包)

有乙個無線大的平面,平面上有n條斜率不為零的直線。有m次詢問,每次詢問從y軸上的乙個點出發往x軸正方向沿一條直線走,最後乙個與這n條直線相交的點的 橫座標。n,m 50000 根據題意我們可以,如果一條直線為 y ax b,另一條直線為 y cx d,則我們容易得出他們的交點的橫座標為 因此我們可以...

2018牛客多校3

h diff prime pairs 1 3 1 5 1 7 1 11.2 3 2 5 2 7 2 11.3 3 3 5 3 7 3 11.4 3 4 5 4 7 4 11.打個素數表 用素數篩一遍 includeusing namespace std bool a 11111111 int zs ...