這次考試總的來說還算正常發揮,不過因為對演算法不熟悉沒有很快想出t2最後想出來卻沒時間調了。
最後得分100+77+100=277,rank2。(不過沒ak有點可惜)
剛開始我先把每到題看了一遍,然後t1沒太理解,t2沒啥思路,於是先去做t3。
t3一看就是道主席樹的裸題。
維護一下值和出現次數就行了,我很快就打完了**,但交上去只有25pts。
當時心態有點炸,仔細檢查一下發現是再減去lca的值時沒有*2,改了之後輕鬆a掉了這一題。
然後我再去做t2。
t2想到乙個很簡單的單次查詢$o(n)$的暴力貪心,寫完交上去拿了77pts,比期望高27pts,估計是出題人用腳造資料吧。
然後就沒有在去看t2了,決定先去搞t1。
此時剛剛過去1/3的時間。
t1描述太過奇怪,我大概又花了20min才看懂,感覺是個貪心。
然後寫了個**交上去只有25pts。寫個對拍(這花了我很長時間)發現了一些錯誤,改了之後交上去就a了。
這是離結束只有30min。
a了這題之後我信心大漲,去看t2。
我突然想到t2說不定可以用倍增去優化之前的暴力(賽後發現我的想法是對的),寫了之後有點小問題。
這時離考試結束只有2min了,最後也沒改過哪個錯誤,考試結束才改過來。
賽後發現做出來的人最多的t2我卻沒做出來,我認為這主要原因是我對某些演算法的不熟悉,畢竟我很久沒練倍增了。
還有就是花了太久時間取讀t1的題意了。
接下來我就來講一下題解:
原題:agc004d
題目描述:
題解:很容易想到貪心。
首先這個題很毒瘤的是1號節點必須連一條到自己的自環。剩下的結構如果我們把每條邊取反可以得到一棵以1為根的樹。
然後處理每個節點的深度和可以到達的最大深度,然後從葉節點向上回溯的時候如果某乙個節點這個數的差》=k的時候,就得把它連向1,之後它的子樹到1的距離都小於等於k了,如果它的父親即是一號點,則如果這個差值》=k-1時都要連向1.
如果它連向1了一條邊,則它的父親統計最大深度時也不用統計它的子樹了。
注意如果1本來沒連向自己答案還要加1。
#include #include原題:arc060c#include
#include
#include
using
namespace
std;
const
int n = 100010
;struct
nodeedge[n
<< 1
];int
head[n], tot;
intn, k;
inta[n];
intdis[n], mx[n];
intans;
bool
vis[n];
void dfs(int
x) mx[x] =max(mx[x], dis[x]);
if (x != 1) }
void add(int u, int
v) ;
head[u] =tot;
}int
main()
else
}dfs(1);
cout
<
return0;
}
題目描述
題解考慮暴力貪心,其實就是求它一天最遠能走到哪,而這樣做的複雜度是$o(n)$的顯然不行(有77pts)。
考慮優化,如果二分找到一天最遠能走到哪,複雜度數$o(ans \times \log)$的,最壞情況還不如上乙個暴力(親測只有66pts)。
考慮每次不止走一天,很容易想到倍增優化:dp[i][j]代表從i走$2^j$天最遠能走多遠,有dp[i][j]=dp[dp[i][j-1]][j-1]
然後就很簡單了。
#include #include原題:abc133f#include
using
namespace
std;
const
int n = 1000010
;int
n;int
a[n];
intl, q, ans, lst;
int dp[n][21
];int pow[21
];int
main()
}dp[i][
0] =lst;
}for (int j = 1; j <= 20; j++)
}while (q--)
}printf(
"%d\n
", ans + 1
); }
return0;
}
主席樹裸題,不講了。
#include #includeusing
namespace
std;
typedef
long
long
ll;const ll n = 100010
;struct
segmenttr[n * 20
];ll rt[n];
struct
nodeedge[n
<< 1
];ll head[n], tot;
ll n, q;
ll dis[n], dep[n], fa[n], son[n], sz[n], bl[n];
void
dfs1(ll x)
}}void
dfs2(ll x, ll chain)
}ll lca(ll u, ll v)
return dep[u] < dep[v] ?u : v;
}void
push_up(ll cur)
void ins(ll &cur, ll pre, ll l, ll r, ll pos, ll v)
ll mid = (l + r) >> 1
;
if (pos <=mid) ins(tr[cur].lson, tr[pre].lson, l, mid, pos, v);
else ins(tr[cur].rson, tr[pre].rson, mid + 1
, r, pos, v);
push_up(cur);
}ll ask_val(ll cur, ll l, ll r, ll pos)
ll ask_cnt(ll cur, ll l, ll r, ll pos)
void
solve(ll x)
}void
add(ll u, ll v, ll c, ll d) ;
head[u] =tot;
}int
main()
dfs1(1);
dfs2(
1, 1
); solve(1);
while (q--)
return0;
}
20200423 docker 虛擬化簡介
部落格主旨 什麼是虛擬化 dokcer介紹 docker版本以及安裝 docker架構 docker映象操作 docker容器操作 什麼是虛擬化 概念 在計算機中,虛擬化技術是一種資源管理技術,是將計算機的實體資源,如伺服器 網路 記憶體及儲存等,予以抽象 轉換後呈現出來。打破實體間的不可切割的障礙...
校內網簡介
校內網 xiaonei.com 成立於2005年12月,是中國最早的校園sns社群。2006年10月,千橡公司收購校內網,同年底,完成了千橡公司5q校園網與校內網的合併,並正式命名為校內網,網域名稱為 www.xiaonei.com。至此,校內網成為中國大學生市場具有壟斷地位的校園 校內網目前是隸屬...
20161104校內訓練
一道類似模擬的題,就根據所寫的東西來做就可以了。include define rep i l r for int i l i r i define per i r l for int i r i l i define erep i u for int i head u i i e i nxt usi...