CCF CSP 區塊鏈 模擬

2021-10-11 21:03:12 字數 2425 閱讀 8711

只有90分,最後乙個點沒通過,想不明白,放這裡晾著吧,有時間反思一下,

大概思路如下:

首先建立乙個圖的資料結構來描述它,然後建立乙個以時間為順序的任務表,這個表我們利用map內建的紅黑樹來實現「插入即排序的功能」,然後以這個時間序為事件發生順序,按照邏輯模擬就可以了,當然我們會發現同一時刻查詢和更新事件發生時,優先更新,類似的,所以我們在查詢時間+0.1什麼的把它的優先順序降低,接下來就是大模擬了。

設計思想:

step1

靜態設定

首先想乙個基礎的資料結構表達題目的所有資料,所以有圖,然後想怎麼操作這些結點,想著大模擬,那以時間模擬,所以建立乙個以時間為序的任務鍊錶,因為要排序,所以選用map;

要完整的描述每個結點,我們仔細閱讀題目發現,只需要記錄每個結點的鏈就可以了,所以加了個v[501], 圖用m[501]

要完整的描述每個任務,我們需要建立乙個結構體task,分析任務有三種狀態,查詢,新增結點,更新鍊錶 ,於是設定乙個status,每個任務處理的物件是節點,所以有node,如果是新增點,就得用add_value,如果是更新鍊錶就得有list,於是乎乙個完整的任務描述就ok了

step2

動態設定

接下來考慮,操作,以時間為序,處理任務,所以用map p,考慮各個操作的優先順序,所以選用double型別,這樣通過±0.1 上下調優先順序,作為時間所用的型別。

step3

然後考慮細節問題,具體實現需要那個模組

一開始創世點為0 init()

讀取的輸入需要處理 input()

建立乙個任務 放到main 和 處理任務的函式中

新增乙個任務到任務表 add_task

執行乙個任務 process_unit

開始處理 start

劃分功能模組,設計好整體的思路,再處理一下具體的細節,很快就可以寫出乙個還不錯的程式

#include

#include

#include

#include

#include

#include

//#define debug

using

namespace std;

enum

;//每個任務分為三個狀態,查詢,新增結點,更新鍊錶

struct task

;vector<

int> v[

501]

;//每個結點的鏈

vector<

int> m[

501]

;//圖

map<

double

,vector

> p;

//任務列表 第乙個引數是時間 為什麼不用int 是因為在同一時刻三個狀態發生時有優先順序,於是直接+-0.1來改變

//他們在任務列表裡的順序

double t,last_t;

void

init

(int n)

void

add_task

(double time,task& a)

else

} vector<

int>

input()

//由於每次讀入不知道是讀入兩個還是三個,所以我們按行讀取

return val;

}void

process_unit

(double time,task &a)

//事件處理單元,處理每乙個事件

cout<[len]

<}else

if(a.status==add_single)

}else

if(a.status==add_list)}}

else

}void

start()

}int

main()

int k;

vector<

int>val;

cin>>t>>k;

cin.

get();

while

(k--

)else

}#ifdef debug

cout<<

"開始 任務列表:"

double

,vector

>

::iterator it=p.

begin()

;while

(it!=p.

end())

it++;}

#endif

last_t=

(--p.

end())

->first;

#ifdef debug

cout<<

"last_time: "

<#endif

start()

;return0;

}

python簡單區塊鏈模擬

最近學習了一點python,那就試著做一做簡單的程式設計練習。首先是這個程式設計的指導圖,如下 對的,類似乙個簡單區塊鏈的模擬。如下 class dadablockcoin index 索引,timestamp 時間戳,data 交易記錄,self hash交易hash,last hash,上個ha...

區塊鏈 區塊鏈雜湊演算法

雜湊演算法是區塊鏈中保證交易資訊不被篡改的單向密碼機制。雜湊演算法接收一段明文後,以一種不可逆的方式將其轉化為一段長度較短 位數固定的雜湊資料。它有兩個特點 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最...

區塊鏈節點和區塊區別 區塊鏈的「區塊」和「鏈」

2017年以來,區塊鏈大火,但是其技術相對生澀。很多 紛紛用通俗易懂的漫畫方式,簡單明瞭的體現出來了區塊鏈的區別和特點。區塊鏈由以前的一人記賬,變成了大家一起記賬的模式,讓賬目和交易更加安全,這就是分布式資料儲存。此外,區塊鏈相關的技術除了分布式儲存,還有去中心化 智慧型合約 加密演算法等等。分布式...