E TT 的神秘任務3

2021-10-06 07:31:47 字數 1736 閱讀 8350

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

463

6-12

-65-

5646

-12-

65-5

63-1

2-65

-566

6-1-

1-1-

1-1-

1

sample output

713

7137

62-1

11

首先是將環狀拆成線性,在後面補k-1個數,是原陣列的第1~(k-1)個數;

初始化每個點的字首和

狀態轉移方程ans=max(ans,sum[i]-min)(i-k<=m<=i)

利用滑動視窗維護乙個長度不超過k的sum單調遞增序列,則min就是佇列的最左端

根據規則更新ans

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

#include

#include

#include

using

namespace std;

const

int maxn =2*

(100000+5

);int n, k, a[maxn]

, sum[maxn]

;long

long ans[3]

;deque<

int> q;

intmain()

for(

int i = n +

1; i < n + k; i++

) sum[i]

= sum[i -1]

+ a[i - n]

;//鏈式字首和

for(

int i =

1; i < n + k; i++)}

if(ans[2]

> n)

ans[2]

%= n;

//返回鏈狀

printf

("%lld %lld %lld\n"

, ans[0]

, ans[1]

, ans[2]

);}return0;

}

Week13 作業 E TT 的神秘任務3

tt 貓咖的生意越來越紅火,人越來越多,也越來越擁擠。為了解決這個問題,tt 決定擴大營業規模,但貓從 來呢?tt 第一時間想到了神秘人,想要再次通過完成任務的方式獲得貓咪。而這一次,神秘人決定加大難度。給定乙個環,a 1 a 2 a 3 a n 其中 a 1 的左邊是 a n 要求從環上找出一段長...

A TT 的神秘任務1

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

TT的神秘任務1(思路)

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