今天做題遇到了這樣一種情況:
每個人有初始資料a,b
當排序的時候,我們依照a進行排序,但是b的順序也要跟著a的順序改變,這時應該怎麼做?
參考題目:
該題中不僅要按照每個人的時間公升序排序,還要輸出每個人原來的序號,因此,一般的想法是建立乙個結構來儲存資料,然後利用sort排序,**如下:
#include #include #include using namespace std;
struct man
;bool cmp(man &a, man &b)
int main()
sort(vec.begin(), vec.end(),cmp);
int i = 0;
for (int i = 0; i < n; i++) }
for (int i = 0; i < n; i++)
printf("\n%.2lf",sum/n);
return 0;
}
其中注意sort函式的前兩個引數是指標,而對於vector的指標就是迭代器。
然後我從題解中看到了不用建立結構的一種聰明的寫法:
因為題目中排隊的人的個數<=1000,所以他將資料這樣處理:
假設乙個人是第x個,時間為t,則令a=1001*t+x(1001實際上可以用任何大於1000的數字代替)
這樣可以保證排序的時候序號不干擾排序
又可以方便輸出序號(只需mod1001輸出序號,/1001 輸出時間)
這樣把每個人的a進行排序,那麼再依次輸出序號和求時間得到答案
最後貌似標準模板類裡面還有個std::pair,專門用來並列儲存兩個資料(相當於乙個只有兩個資料的struct?)詳情可參考:std::pair - cppreference.com
結構體儲存
struct a sizeof struct a struct b sizeof struct b struct c sizeof struct c 和老師交流時,老師給我出了幾道c c 細節方面的問題,其中遇到了一道關於結構體在記憶體儲存的問題,老師先後變換了這幾種種情況,最後一種情況還是沒有回答...
商人的訣竅(結構體儲存排序
商人的訣竅 time limit 1000ms memory limit 65536kb submit statistic problem description 第一行包括兩個非負整數n,m 分別代表e star帶的金幣數,von盛蘋果的倉庫數量,不超過50 接下來有有m行,每行包括兩個數非負整數...
結構體及結構體排序
1 定義的方法struct node 用strut定義乙個結構體,node是結構體的名字,可以自己瞎取。p 1000 這樣你就定義了乙個神奇的陣列!沒錯,它就是node型陣列!上面的 還在結構體的末尾定義了乙個該型的陣列,其實這個陣列不一定要有,而且也可以在主函式中定義,但是感覺上用的比較多,而且這...