游族杯 2018華師大邀請賽C物件導向程式設計

2021-08-19 23:49:13 字數 1591 閱讀 4286

題目:

思路:首先可以確定暴力肯定不行

當時想的是縱向不行可以轉換角度橫向思考。對於每乙個函式,我們可以順次找出可以呼叫它的類,對於這些類,我們可以建一棵樹,然後對於一棵樹,就可以考慮到dfs。當時想到這裡再繼續想做法的時候,覺得雖然知道可以呼叫某個函式的類,但是對於乙個未知的u,要求解的話每次都要跑一下dfs,然後gg。當時考慮最暴力的方法是map直接離線處理。然後並沒想到把這兩種方法結合起來,用棧儲存每個函式所屬的類,離線處理得到所有答案。唉。。還是太菜。。就是get不到點上。。

官方題解:離線處理——對每種函式維護乙個棧,棧中記錄類名。dfs的時候更新棧(進入時壓入,退出時彈出)。對於某個節點上所有查詢,答案就是對應函式的棧頂元素。

**過程:看了題解之後,開開心心去寫了。。

1、剛開始是對於每個節點,存了(節點u,所有a)的答案,dfs的過程每進乙個節點要走乙個10^6的迴圈。。和暴力有什麼差。。簡直是腦子瓦特了

2、改進之後,用一維陣列ans儲存答案,map記錄了(u,r)的位置,然後wa了。。檢查的時候發現如果有重複的對出現,map的值會被覆蓋。。在小夥伴的提示下,用vector存了r和pos。over。

寫這麼多只是為了記錄一下心酸的過程。有些時候問題真的不是出現在思路,而是在實現。之前一道dp也是這樣,換一種寫法會發現總有考慮不到的問題。以後還是要多想一想,要更細緻一些。

#include 

#include

using

namespace

std;

typedef pairpa;

vector

>s;

vector

>edge;

vector

>num;

vector

>record;

vector

ans;

int maxt=0;

void dfs(int x)

for(int i=0;iint t=record[x][i].first;

if(t<=maxt)

}for(int i=0;iint v=edge[x][i];

dfs(v);

for(int j=0;jint t=num[v][j];

s[t].pop();}}

}int main()

for(int i=1;i<=n;i++)

}s.resize(maxt+1);

record.resize(n+1);

int q,u,r;

scanf("%d",&q);

ans.resize(q);

for(int i=0;iscanf("%d%d",&u,&r);

record[u].push_back(pa(r,i));

}dfs(1);

for(int i=0;iif(!ans[i])

printf("-1\n");

else

printf("%d\n",ans[i]);

}return

0;}

2018南昌邀請賽網路賽d題

剛開始看到此提時也沒想到dp 但是仔細一思考可以發現確實是 我們只要單獨處理第一位數 剩下的符號和數字看成乙個物品 進行類似揹包的dp即可 首先預處理所有火柴和符號 根據輸入的總火柴進行一次dp即可 include include include includeusing namespace std...

2018acm icpc西安邀請賽總結

比賽一如既往還是在仙工大舉辦 day1 今天開始下了點小雨,作為第一次正式參加邀請賽 口胡,上一次不算,連門都沒入就去了 雖說也來過這兒幾次了,但這一次並不打算住在這兒 萬惡的xx酒店 今年參加邀請賽的隊伍比去年多了很多,大概有將近400支隊伍了,其中當然有要來屠榜的三大名校 西工大附中,西鐵一中,...

2018ACM CCPC湖南湘潭邀請賽參賽感受

第一次打邀請賽,有很多不足的地方!首先打比賽前沒有好好準備板子,這是乙個很大的致命傷。當時賽場上c題想法是建n個線段樹然後二分答案,然後發現這就是主席樹水題,高興不行感覺拿銀有望,結果翻翻板子,發現沒有主席樹的模板,心情複雜。由於實力原因,只會mle形式的手擼n棵線段樹,故最後沒有做出來。其次是沒人...