題意:給你兩個序列,問你從第乙個序列中有多少個與第二個序列長度相同的並且對應位置都是大於等於第二個序列的子串。
題解: 神仙bitset題,維護第二個序列的bitset,例如樣例中的 2 3 3,按照大小排序後維護的m個bitset為:0100,0110,0111,,樣例中的資料維護的bitset不是很好理解,在舉乙個例子比如:2 4 5 3 6,按照大小排序後的m個bitset為:010000,010010,011010,011110,011111,維護出第二個序列的bitset後我們就可以通過bitset的&操作求得答案了,我們在維護好m個bitset後對於第乙個序列,我門可以通過二分的去找到第二個序列中小於等於它的最大的位置,得到它可以放的位置的bitset資訊,我們考慮從左往右或者從右往左在維護乙個bitset,初始化全為0,當我們從後往前時,如果當前的數大於等於第二個序列的第m個數,那麼將我們維護的bitset第m為賦值為1,往左走將維護的bitset對應左移一位後與當前位置的bitset資訊取&後為1,那麼就代表從右邊的某個數作為最後乙個數,到當前位置是可以作為第二個序列的最後幾位數的,是滿足條件的,然後繼續執行下去,如果第1位為1了那麼說明肯定存在乙個長度為m的子串是滿足條件的,答案加一。
ac**:
#include #include #include #include #include #include #include #include #include #include #include #include#include #include #include #define ls (k<<1)
#define rs ((k<<1)|1)
#define mid ((l+r)>>1)
using namespace std;
using namespace std;
const int maxn=150010;
const int maxm=40010;
const int inf=1e9+7;
bitsetcur,s[maxm];
int ai[maxn],bi[maxm],ci[maxm];
struct nodeqi[maxm];
bool cmp(node a,node b)
printf("%d\n",ans);}/*
6 31 4 2 8 5 7
2 8 3
*/
2020牛客多校第二場 A , J 題
j題 just shuffle 題意 已知置換 e 變換k次後得到乙個置換a 已知 求置換e變換一次得到的置換x。題解 這題我們能想到,對於變換規則,會存在一些環,意味著變換環的大小後置換不變。我們針對每個環考慮,設環的大小為len,變換一次的狀態等價於變換 len y 1 次,那我們從已知考慮,已...
牛客多校第二場 J farm
輸入描述 the first line of input contains 3 integers n,m,t n m 1000000,t 1000000 for the next n lines,each line contains m integers in range 1,n m denotin...
2019牛客多校第二場
蒙特卡洛 猜答案 注意答案要累乘 最大的可以用rmq rmqrm q做然後挖掉四個角分別再做一次即可 掛一下大佬的鏈結 最重要的是學會了字首和查詢相差為1 11的時候的奇技淫巧 include include define fo i,a,b for i a i b i define fd i,a,b...