稀疏向量 CSP 202006 02 C 題解

2021-10-24 12:23:14 字數 898 閱讀 2379

csp 202006-02 稀疏向量

為了節省空間和時間,將向量v1儲存到實體內,而對向量v2的每組資料直接判斷操作。

建立乙個指向v1首元素的指標pivot。

如果當前比較的v1,v2腳標相同,則相乘,加入內積,pivot指向下一元素。同時,這意味著前乙個元素不會出現在以後的遍歷中,節省了演算法執行的時間。

如果v1的角標大於v2的腳標,由於v1儲存的是稀疏向量非0項元素,故對於當前輸入的v2元素,它對應的是向量v1中的零元素,故直接跳出迴圈,進行下乙個v2元素輸入。

如果v2的腳標大於v1的角標,說明對於v2,上次輸入到本次輸入之間的區間元素都為零元素,故pivot自加一,進行下次匹配。

//343ms    7.515mb

#include #include using namespace std;

int main()

int x1, y1;

int pivot = 0;

for (int j = 0; j < b; j++)

else if (x1 < v1[pivot].first) //當前輸入元素角標小於當前容器角標,相當於內積為0,忽略

break;

else /*if (x1 > v1[pivot].first)*/ //v1當前指向元素角標小於輸入的,自加一再比較

pivot++;

} }cout << innerproduct << endl;

return 0;}/*

10 3 4

4 57 -3

10 1

1 10

4 20

5 30

7 40

*/

本文思路受啟發

CSP2020 6 2稀疏向量

題目位址稀疏向量 此題解題思路是因為是稀疏向量,所以肯定不能用陣列,此題最好使用 vector 來儲存傳入的資料。同時還要考慮到資料量一旦大的話,就不能把向量a中的乙個元素和向量b中的元素比較n次。考慮輸入的向量總是順序的,可以維護兩個數字下表來控制比較的次數 include include usi...

演算法巧解 csp稀疏向量 使用map 鍵值對

這個 很簡單,就是簡單模擬一下,使用兩個陣列,分別儲存兩個向量,最後再遍歷一下就ok 但是只有60分,因為該儲存方式是將稀疏向量恢復為不稀疏的向量儲存的,導致在測試最大的幾個資料項的時候記憶體不夠用 include using namespace std intmain int varr n 1 f...

202006 2 稀疏向量

試題編號 202006 2 試題名稱 稀疏向量 時間限制 2.0s 記憶體限制 512.0mb 最開始用結構體寫的,思路和用map差不多,但是一直執行超時,然後換用map寫的最後滿分過了。輸入第乙個向量將值和下標都存到map裡,輸入第二個向量時進行判斷,如果輸入的下標在map裡的值不為零,說明該位置...