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裡的值不為零,說明該位置...