CCF 202006 2 稀疏向量 c

2021-10-11 03:17:50 字數 1021 閱讀 5907

既要考慮時間複雜度又要考慮空間複雜度,雖然能輕鬆拿到30、60分,但想要拿100還的確要下點功夫。

注意的點:

1、測試點7,8,9,10資料規模太大,不可使用下標去表示向量位置。就算把陣列開到堆區還是不夠去表示的。這也有失稀疏矩陣的原意。 ——空間不夠。

2、不可使用兩層for迴圈去遍歷。——時間不夠。

**長度		624b

程式語言 c++

評測結果 正確

得分 100

時間使用 1.468s

空間使用 18.73mb

下面的這段**,是看了許多博主後得出來的。

初看他的while迴圈與我的for迴圈沒啥不一樣,但是細琢磨的話:

#include

using

namespace std;

struct point

;struct point a[

999999

],b[

999999];

intmain()

for(

int i =

0; i < b_n; i++

)long

long res =0;

int p =

0, q =0;

while

(p < a_n && q < b_n)

if(a[p]

.m_x > b[q]

.m_x)

if(a[p]

.m_x < b[q]

.m_x)

} cout << res;

return0;

}

附:

for

(int i =

0; i < b_n; i++)}

}

CCF202006 2 稀疏向量

1,這題看完資料規模 1e6 1e6 就應該知道兩次迴圈是會超時的 但還是不死心試了一次,最後執行超時 30分 2,第二次換成雙指標了,複雜度降到了一階,但還是超時了,最後70分,想了想應該沒法繼續改進演算法降低複雜度了,所以估計是輸入輸出的問題 3,把cin cout 換成scanf printf...

CCF 202006 2 稀疏向量 簡單題解

建立乙個map只儲存第乙個向量的非零維度,第二個向量邊輸入邊尋找第乙個向量是否存在相同的維度,如果存在則相乘累加。ccf試題2020.7.28做的.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include include using namespace std 10 3 4 4...

202006 2 稀疏向量

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