Bound Found(尺取 字首和)

2021-09-10 02:06:03 字數 1041 閱讀 4898

題目大意:就是給n個有正有負的整數,然後給k個t,在n數列中找到連續的乙個序列使得這個序列的和的絕對值最接近t,然後輸出這個序列的和的絕對值和它的區間左右端點。

思路:這是個尺取的問題,首先這是我第一道尺取題,不知道為什麼第一道就不容易找單調出序列,不知道掛題的學長怎麼想的,雖然當時講了一小下這種問題,但是我沒怎麼很明白,也就是不會實現。然後剛剛看了大佬的部落格才知道怎麼回事,我都沒有找到詳解,還是自己除錯看的,嗯,還是太弱了,不知道為啥,就是看不懂想不明白所以只能自己除錯一下了。

我的想法就是,首先找到這個單調的序列嘛,然後就想到字首和嘛,這個我還是明白的,因為之前就接觸過字首和這種東西,所以這個也很好說,但是呢,怎麼利用這個字首和來實現我們的目的?這就是個問題了。我就是這裡一直沒懂。

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using namespace std;

struct node

a[100005];

bool cmp

(node n1,node n2)

intmain()

sort

(a,a+n+

1,cmp)

;//這兒呢,因為sort函式是左閉右開區間,所以就是區間長度是多少,右指標就是多少

int t;

while

(k--)if

(tempright++

;else

if(temp>t)

left++

;//這兒呢一定要是else if,不然的話如果是if的話,那麼這句和下句的else就是一對,然後只要temp>t了就會break了,顯然是不對的。

else

break;if

(left==right)

right++;}

printf

("%d %d %d\n"

,ans,ansl,ansr);}

}return0;

}

數學考試 字首和(尺取)

今天qwb要參加乙個數學考試,這套試卷一共有n道題,每道題qwb能獲得的分數為ai,qwb並不打算把這些題全做完,他想選總共2k道題來做,並且期望他能獲得的分數盡可能的大,他準備選2個不連續的長度為k的區間,即 l,l 1,l 2,l k 1 r,r 1,r 2,r k 1 r l k 第一行乙個整...

poj 2566 字首和 規律進行尺取

傳送門 二分尺取 字首和,需要按一定的規律,不然尺取到一段後,反而縮,就會出現問題,所以需要先記錄每乙個點的編號,然後求字首和,然後進行排序,然後再進行尺取 ac include include include include include define ll long long using na...

POJ2566(尺取法 字首和)

題意 給出乙個整數列,求一段子串行之和最接近所給出的t。輸出該段子序列之和及左右端點。思路 做這道題其實是沒思路的,看了大佬的題解後學習到了。一般來說,我們必須要保證數列單調性,才能使用尺取法。預處理出前i個數的字首和,和編號i一起放入pair中,然而根據字首和大小進行排序。由於abs sum i ...