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
sample output463
6-12
-65-
5646
-12-
65-5
63-1
2-65
-566
6-1-
1-1-
1-1-
1
首先是將環狀拆成線性,在後面補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...