題目鏈接:
題目背景
飛逝的的時光不會模糊我對你的記憶。難以相信從我第一次見到你以來已經過去了 3 年。我仍然還生動地記得,3 年前,在美麗的集美中學,從我看到你微笑着走出教室,你將頭向後仰,柔和的晚霞照耀着你玫瑰色的臉頰。我明白,我已經沉醉於你了。之後,經過幾個月的觀察和窺探,你的優雅與智慧,你對待生活的態度和你對未來的願望深切地在我心中留下了印象。你是迷人的陽光女孩,我總是夢想着與你分享餘生。唉,實際上你遠遠超過了我最瘋狂的夢想。我不知道如何橋起我與你之間的鴻溝。所以我沒有任何計劃,僅僅只是等待,等待一個適當的機會到來。直到現在,畢業的到來,我意識到我是個傻瓜,我應該創造機會並且抓住它而不只是等待。
這些日子裏,我和我的朋友、室友、同學一個接一個地分開。我仍無法相信,在揮手之後,這些熟悉的面孔很快就會從我們的生活中消失,僅僅留下回憶。我明天就將離開學校。你已經計劃遠走高飛,追求你的未來,實現你的夢想。如果沒有命運,也許我們不會再次相遇。所以今晚,我正在你的宿舍樓下徘徊,希望能偶然遇見你。但矛盾的是,你的美貌一定會使我心跳加速,我笨拙的舌頭也許無法吐出一個字。我不記得我曾多少次經過你的宿舍樓,每次都希望看到你出現在陽臺上或是窗臺上。我不記得這個想法曾多少次在我的腦海中湧出:打電話叫她一起喫晚飯或是聊聊天。但每次,考慮到你的優秀和我的平凡,膽怯的優勢超越勇氣驅使我靜靜地離開。
畢業,意味着中學生活的終結。這些光榮與浪漫的時代結束。你可愛的微笑是我原來努力學習的動力,這單相思的愛情會被密封,作爲一個我心靈深處的記憶。畢業,也意味着新生活的開始,一個到達光明未來的足跡。我真希望你在國外天天開心,一切順利。同時,我將努力從幼稚中走出來,變得更加成熟。我的理想將是在現實中追求我的愛與幸福,我永遠不會放棄。
再見了,我的公主!
如果有一天,在某個天涯海角,我們有機會相聚,即使是白髮蒼蒼的男人和女人,在那個時候,我希望我們可以成爲好朋友來自豪地分享這個記憶,重溫年輕快樂的激情。如果這個機會永遠沒有到來,我希望我是天空中的星星,在你的窗外閃爍。遠遠地保佑着你,就像一個朋友,每天晚上陪伴在你左右,一同分享甜美的夢亦或是一同經歷可怕的夢。
題目
現在問題來了:天空可以理解爲一條數軸,在這條數軸上分佈着許多顆星星,對於每顆星星都有它的位置 和自身的亮度 。而窗戶所能看到的範圍是一個給出的參數,我們看到的星星也包括窗戶邊緣的星星。現在,要你求出調整窗戶位置後能看到星星的亮度之和最大值。
輸入
一行 , ,分別代表星星的數量和窗戶的寬度
餘下 行,輸入 和 ,代表星星的座標和亮度
輸出
一個數字,代表能看到星星的最大亮度和
樣例輸入
6 3
1 2
2 4
3 8
4 4
5 2
1000 1
樣例輸出
16
樣例解釋
對於 的數據,(沒有邊緣)
對於 的數據,
對於 的數據, 除 的情況外, 均爲 的奇數
思路
這道題的背景好強啊…
但是!這道題我一開始竟然以爲只能用線段樹,再看一下標籤,發現有隻有線段樹和貪心。
結果做了一半發現前綴和直接就可以了。
……
所以這道題其實很好做,直接簡單的前綴和就完事了。
不過要記得就是一個座標可能會不止一個星星,所以我們可以把一個座標的星星亮度累加起來,不要用直接重新賦值的方法。
代碼
#include<cstdio>
#include<iostream>
using namespace std;
int n, m, a[100001], x, y, b[100001], ans;
int main() {
scanf("%d %d", &n, &m);//讀入
for (int i = 1; i <= n; i++) {
scanf("%d %d", &x, &y);//讀入
a[x] += y;//計算出每一個座標的總亮度
}
if (m == 0) {//沒有窗子
printf("0");
return 0;
}
for (int i = 1; i <= 100000; i++)
b[i] = b[i - 1] + a[i];//處理出前綴和
for (int i = m; i <= 100000; i++)
ans = max(ans, b[i] - b[i - m]);//直接模擬每一個窗戶的位置可以得出的答案
printf("%d", ans);//輸出
return 0;
}