【差分】侦察兵
偵察兵
題目大意:
給出一個圖,再給一些點,求出這些點左上角和右下角的數(shù)之和
原題:
題目描述
mxy 沉迷于一個辣雞游戲不可自拔。
游戲地圖是一個 n*n 的矩形,在每個單位格子上有一個數(shù)字,代表當前位置的生命體
個數(shù),作為一個偵察兵,mxy 的任務(wù)是計算出她所在位置的左上角和右下角的總?cè)藬?shù)(不
包括她所在的行列)。
注意作為一個偵察兵,mxy 是不包括在地圖上的生命體個數(shù)中的。
輸入
第一行 2 個整數(shù) n 和 t。(1≤n≤1000,1≤t≤1000)
接下來 n 行,每行 n 個整數(shù)表示每個單位格子上的生命體個數(shù) a。(1≤a≤100)
再下來 t 行,每行兩個整數(shù) xi,yi,表示不同時刻 mxy 在地圖上的位置。
輸出
T 行,每行一個整數(shù),表示當前時刻 mxy 所在位置的左上角和右下角的總?cè)藬?shù)。
輸入樣例
4 1
0 1 2 0
3 2 0 0
1 2 3 2
0 0 0 10
3 3
輸出樣例
16
解題思路:
用差分,快速求出每一個區(qū)域的值
代碼:
#include<cstdio> using namespace std; int n,t,x,y,a[1005][1005]; int main() {scanf("%d %d",&n,&t);for (int i=1;i<=n;++i)for (int j=1;j<=n;++j){scanf("%d",&x);a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+x;//差分}for (int i=1;i<=t;++i){scanf("%d %d",&x,&y);printf("%d\n",a[x-1][y-1]+a[n][n]-a[x][n]-a[n][y]+a[x][y]);//左上和右下} }總結(jié)
- 上一篇: 比亚迪:传统巨头与新势力合作证明中国新能
- 下一篇: 初一模拟赛(4.20)