返回列表 發帖

202404潛力1-降雨量統計


降雨量統計 (Rainfall)
問題敘述
方塊市因其城市道路規劃方正而得名。由於氣候變遷的緣故,近年方塊市的降雨量增加許多,各地都觀測到連綿不斷的降雨情形,有些可能造成淹水的問題。
市長希望可以使用大數據來引導城市的發展。
我們可以用一個長為 R、寬為 C 的矩形來描述方塊市中的一個行政區。區域的左上角為 (0, 0),右下角為 (R, C)。每一筆降雨資料都會描述這個行政區中某個矩形範圍觀測到的降雨量,假設今天R = 2、C = 3,如果有一筆降雨資料描述從 (0, 0) 到 (2, 2) 的範圍有30的降雨量,則整個區域的降雨情形會變成下圖左方所示。
如果又有兩筆資料分別描述從 (0, 1) 到 (1, 2) 的範圍有100的降雨量,以及從 (1, 1) 到 (2, 3) 的範圍有50的降雨量,則整個區域的降雨情形會變成下圖右方所示。

請寫一支程式統計蒐集到的降雨量資料,加總每個位置的降雨量。


評分說明
此題目測資分成三組,每組測資有多筆測試資料,需答對該組所有測試資料才能獲得該組分數,各組詳細限制如下。
第一組(20分):Q ≤ 10。
第二組(40分):Q ≤ 5000。
第三組(40分):無特別限制。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
May

  1. //#include<iostream>
  2. //#include<vector>
  3. #include <bits/stdc++.h>
  4. using namespace std;

  5. int main()
  6. {
  7.     int R, C;
  8.     cin >> R >> C;
  9.     vector<vector<int>> diff(R+1, vector<int>(C+1, 0));

  10.     int Q;
  11.     cin >> Q;
  12.     for(int i=0; i<Q; i+=1)
  13.     {
  14.         int data[5];
  15.         for(int j=0; j<5; j+=1)cin >> data[j];
  16.         diff[data[0]][data[1]] += data[4];
  17.         diff[data[0]][data[3]] -= data[4];
  18.         diff[data[2]][data[1]] -= data[4];
  19.         diff[data[2]][data[3]] += data[4];
  20.     }

  21.     int rowsum = 0;
  22.     for(int j=0; j<C; j++)
  23.     {
  24.         rowsum += diff[0][j];
  25.         diff[0][j] = rowsum;
  26.         cout << diff[0][j] << ' ';
  27.     }
  28.     cout << '\n';
  29.     for(int i=1; i<R; i++)
  30.     {
  31.         rowsum = 0;
  32.         for(int j=0; j<C; ++j)
  33.         {
  34.             rowsum += diff[i][j];
  35.             diff[i][j] = rowsum + diff[i-1][j];
  36.             cout << diff[i][j] << ' ';
  37.         }
  38.         cout << '\n';
  39.     }

  40.     return 0;
  41. }
  42. /*
  43. 2 3
  44. 3
  45. 0 0 2 2 30
  46. 0 1 1 2 100
  47. 1 1 2 3 50

  48. 1 1
  49. 3
  50. 0 0 1 1 1
  51. 0 0 1 1 1
  52. 0 0 1 1 1
  53. */
複製代碼
May

TOP

返回列表