藍橋杯模擬題 天上的星星(字首和)

2021-09-13 11:50:29 字數 1276 閱讀 8847

題目描述

在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。

蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。

天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。

現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少(包含邊界上的星星)。

輸入格式
第一行輸入乙個整數 n(1 \le n \le 50000)n(1≤n≤50000) 表示星星的數量。

接下裡 nn 行,每行輸入三個整數 x,y,w(0 \le x, y, w\le 2000)x,y,w(0≤x,y,w≤2000),表示在座標 (x,y)(x,y) 有一顆亮度為 ww 的星星。注意乙個點可能有多個星星。

接下來一行輸入乙個整數 q(1 \le q \le 50000)q(1≤q≤50000),表示查詢的次數。

接下來 qq 行,每行輸入四個整數 x_1, y_1, x_2, y_2x1,y1,x2,y2,其中 (x_1, y_1)(x1,y1) 表示查詢的矩形的左下角的座標,(x_2, y_2)(x2,y2) 表示查詢的矩形的右上角的座標,0 \le x_1 \le x_2 \le 20000≤x1≤x2≤2000,0 \le y_1 \le y_2 \le 20000≤y1≤y2≤2000。

輸出格式
對於每一次查詢,輸出一行乙個整數,表示查詢的矩形區域內的星星的亮度總和。

分析
這道題用到了字首和的知識,字首和相當於高中學的數列前n項和,所以這道題可以求出字首和,

二維陣列下標(i,j)的值就是矩形(0,0)(i,0)(0,j)(i,j)範圍內的亮度。

**
#include

using namespace std;

int arr[

2005][

2005];

intmain()

for(i=

1;i++i)

} cin>>m;

while

(m--

)return0;

}

下面我們來分析一下為什麼要加一,題目要求矩形區域內的亮度包含邊界上的星星,所以我們在計算總亮度的時候,會減去不需要的區域的亮度,那麼不需要的區域就不可以包含所求區域的邊界,如果我們求(0,0)(0,j)(i,0)(i,j)區域內的亮度,那麼就可能會減掉邊界上的亮度,從而導致最後的結果不準確。

字首和 天上的星星

題目 在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n 1 n ...

藍橋杯 2018 H 天上的星星

在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n n 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n 1 n...

計蒜客 天上的星星(字首和)

天上星星 在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 輸入格式 第一行輸入...