
【資料圖】
鋸齒矩陣是指每一行包含的元素個數不盡相同的矩陣,比如
3 5 2 1 62 3 41 6 2 7
讀入若干對整數(x,y),表示在第x行的末尾加上一個元素y。輸出最終的鋸齒數組。初始時矩陣為空。
輸入格式
第一行輸入兩個整數n,m(1<=n,m<=10000),其中n表示鋸齒矩陣數組的行數,m表示插入元素的總數。
接下來一個m行,每行兩個整數x,y(1<=x<=n,0<=y<=10000),表示在第x行的末尾插入一個元素y。
輸出格式
一共輸出n行,每行若干個用空格分隔的整數。如果某行沒有任何元素,則輸出一個空行。
樣例輸入
3 121 32 22 32 43 13 61 51 21 63 23 71 1
樣例輸出
3 5 2 6 1 2 3 4 1 6 2 7
在看到這題的第一個想法就是用普通的數組去解決,但又想到要創建一個n*10000的數組,難免會出現問題,又因為本題每一行的元素是根據輸入的元素個數變化而變化的,即是一個動態存儲的過程,這無疑為vector提供天然的良機,因此本題用vector動態數組來解決,不僅簡單(只用二維動態數組即可解決(前者表示行數,后者表示每一行存放的元素)),而且占用的空間內存比普通數組要少得多,采用動態數組為本題的最優解!
#includeusing namespace std;int main(){ vector a[10005];//在比賽中常見的定義二維動態數組的方法,方法固定,且效果穩定 int n, m, x, y; cin >> n >> m; for (int i=0;i > x >> y; a[x].push_back(y);//對每一行插入元素 } for (int i=1;i<=n;i++) { for (int j=0;j