Week13 作業 E TT 的神秘任務3

2021-10-06 04:55:52 字數 1543 閱讀 3095

tt 貓咖的生意越來越紅火,人越來越多,也越來越擁擠。

為了解決這個問題,tt 決定擴大營業規模,但貓從**來呢?

tt 第一時間想到了神秘人,想要再次通過完成任務的方式獲得貓咪。

而這一次,神秘人決定加大難度。

給定乙個環,a[1], a[2], a[3], … , a[n],其中 a[1] 的左邊是 a[n]。要求從環上找出一段長度不超過 k 的連續序列,使其和最大。

這一次,tt 陷入了沉思,他需要你們的幫助。

input

第一行乙個整數 t,表示資料組數,不超過 100。

每組資料第一行給定兩個整數 n k。(1 ≤ n ≤ 100000, 1 ≤ k ≤ n)

接下來一行,給出 n 個整數。(-1000 ≤ a[i] ≤ 1000)。

output

對於每一組資料,輸出滿足條件的最大連續和以及起始位置和終止位置。

如果有多個結果,輸出起始位置最小的,如果還是有多組結果,輸出長度最短的。

sample input

46 3

6 -1 2 -6 5 -5

6 46 -1 2 -6 5 -5

6 3-1 2 -6 5 -5 6

6 6-1 -1 -1 -1 -1 -1

sample output

7 1 3

7 1 3

7 6 2

-1 1 1

解題思路:

用單調佇列維護。

先求出sum[1…i]的和,將前k個新增到n的結尾就相當於有迴圈和了。

那麼對於某個sj,他的最大的序列和為sum[j] - sum[i],其中 j - k - 1 <= i <= j - 1.

那麼用單調佇列去維護i,可以在o(1)的時間去求出sum[i]。

#include

#include

using

namespace std;

const

int maxn =

1e6+5;

const

int inf =

0x3f3f3f3f

;int sum[maxn]

;int n,k;

int deq[maxn]

;int

main()

for(

int i=n+

1;i) sum[i]

=sum[n]

+sum[i-n]

;int head=

0,tail=0;

int mxx=

-inf;

int l,r;

for(

int i=

1;i<=n+k-

1;i++)}

printf

("%d %d %d\n"

,mxx,l,r);}

return0;

}

week13作業B TT的神秘任務2

題目 在你們的幫助下,tt 輕鬆地完成了上乙個神秘任務。但是令人沒有想到的是,幾天後,tt 再次遇到了那個神秘人。而這一次,神秘人決定加大難度,並許諾 tt,如果能夠完成便給他乙個獎勵。任務依舊只給了兩個數字,分別表示 n 和 k,不過這一次是要求 tt 給出無法被 n 整除的第 k 大 的正整數。...

Week13作業 B TT的神秘任務2 模擬

任務依舊只給了兩個數字,分別表示 n 和 k,不過這一次是要求 tt 給出無法被 n 整除的第 k 大的正整數。例如 n 3,k 7,則前 7 個無法被 n 整除的正整數為 1 2 4 5 7 8 10 答案為 10。第一行乙個整數 t,表示資料組數,不超過 1000。之後 t 行,每一行給出兩個正...

Week13 作業 必做

a tt 的神秘任務1 這一天,tt 遇到了乙個神秘人。神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。例如 n 10,k 3,答案可以為 4 2 4 tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?本題是spj input 第一行乙個...