牛客多校第六場 K Bag(暴力,貪心)

2021-10-08 23:28:59 字數 1507 閱讀 6418

題意:

原序列是一堆k個數全排列組成的。給你乙個串,求這個子串是否可能是原序列子串

思路:

直接暴力啊,維護出dp[

i]dp[i]

dp[i

]代表i

ii~i+k

−1i+k-1

i+k−

1是否是全排列,然後列舉第乙個排列的終止位置。列舉起始排列的複雜度為k

kk,check的複雜度為n/k

n/kn/

k,所以就是o(n)的。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

5e5+7;

const

int mod1 =

122777

;const

int mod2 =

9209

;typedef

long

long ll;

int a[maxn]

,dp[maxn]

,pre[maxn]

;unordered_map<

int,

int>mp;

int n,k;

void

init()

}void

pre(

) mp[a[i]

]= i;}}

void

solve1()

}else

mp[a[i]]=

1;cnt++;if

(cnt == k)}}

}int

solve2()

else

}return n;

}int

solve3()

else

}return1;

}int

main()

pre();

solve1()

;int pos1 =

solve2()

;int pos2 =

solve3()

;int ok =0;

for(

int i =

1;i <= pos1;i++)}

if(flag ==1&&

(n - pos2 +1)

>=

(n - i)

% k)}if

(ok ==1)

else

}return0;

}

牛客多校第六場

d 題意感覺說的不是很清楚,一開始題意弄錯了,以為是最優的方案,結果是對於每個盒子這個 so clever 的人的做法是優先選擇盡可能大的物品裝完乙個盒子,我就不知道這個人 聰明了。思路 賽後知道題意後,5分鐘寫完,瞎暴力就一發過了,我自己都有點出乎意料真水了。includeusing namesp...

2019牛客多校第六場C(PAM)

傳送門 不會pam,建議看一下該部落格pam 維護乙個陣列,表示節點對於答案的貢獻 那麼如何計算這個值呢,首先我們需要知道它是由誰轉移而來的,比如該節點表示的是aabbbbaa,他是由abbbba轉移而來的,我們在計算aabbbbaa時首先要加上abbbba,然後還有一些fail邊連向的點首先我們來...

2020牛客多校第六場 K

題意 判斷給的序列是不是 任意1 n的全排拼接成序列的連續子串行 每乙個數字應該屬於的地方它只能出現一次。從任意點i開始,如果某個點在往後查詢的時候出現了兩次,那麼i點最多能夠延伸到那個地方。然後我們可以把每個點求一下最多能延伸到哪個點,直接記錄len。操作看 處理 由於k很大,可以到1e9,但是n...