牛客等級之題N1(8 13場)3的倍數

2021-10-09 03:45:14 字數 837 閱讀 9568

最容易想到的辦法是通過記錄每個字串中每個字母出現的次數,然後將所有n個字串進行各種組合,確定最多可選擇的字串數。但是這樣的複雜度為2的n次方,肯定不行。

所以想到用類似於字首和的方式,遍歷所有字串過程中,判斷當前遍歷到的字串的狀態與之前某位置字串狀態是否相同

對於狀態而言,可以用狀壓來完成,實際上也就是借用二進位制串的方式,將當前字串中每個字母出現的次數記錄,並將26個字母的出現次數這樣乙個狀態轉換為乙個數,可能出現的最大的數是3的26次方,所以宣告long long型來儲存。

確定了狀態後,我們只需要用unordered_map雜湊表記錄每個遍歷到的字串的狀態,並在遍歷過程中每次檢查當前狀態是否之前出現過,若出現過說明這兩個位置之間的所有字串合在一起,所有字母出現的次數都是3的整數倍。

特判一下狀態值為0的情況,此時遍歷到的字串之前所有的字串合到一起也滿足條件。

#include

using

namespace std;

typedef

long

long ll;

int x[26]

;ll check()

return res;

}int

main()

ll pos =

check()

;//cout << "pos = " << pos << endl;

if(pos ==0)

else

if(mp[pos]

>0)

else

} cout << res << endl;

}

牛客等級之題N1(8 4場)購物

題目鏈結 在遙遠的東方,有一家糖果專賣店。這家糖果店將會在每天 一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果 為c i j 元。現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。因為最多隻生產m個 買來糖果以後,你可以選擇吃掉糖果或者留著...

牛客等級之題N2

目錄牛客等級之題n2 8.3場 設大半圓的半徑為 r 左小半圓半徑為 r r kr 0 pi r 2 pi k 2r 2 pi r kr 2 2s r 2 k k 2 frac k frac 時 r 2 最小 include using namespace std const double pi a...

牛客等級之題N1(8 4場) 購物 dp動態規劃

在遙遠的東方,有一家糖果專賣店。這家糖果店將會在每天 一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果 為c i j 元。現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。因為最多隻生產m個 買來糖果以後,你可以選擇吃掉糖果或者留著之後再吃。...