考試總結 2022 02 14

2022-09-21 07:15:06 字數 4531 閱讀 7555

問題主要出在了怎麼判斷沒有問號的序列是否合法,更關鍵的問題是場上讀錯題了,乙個字首是從後往前逐三個刪,得到的 \(0/1\) 也往末尾

沒有被操作的數字形成了個大小為偶數的棧,我們兩個一組向其中加數字,初始狀態棧為空,加入 \(s_,s_\);最後加入 \(s_\) 判斷是不是存在乙個棧使得再操作整個棧能得到 \(1\)

向棧中加數分兩種情況,設當前加入 \((a,b)\):

注意到這裡的棧有 \(4\) 中表達方式:加入 \(0/1\) 後操作,結果為 \(0/1\)。那麼據此設 \(f_\) 表示用前 \(i\) 個數經過若干(可以為 \(0\))次操作,得到的棧加入 \(0\) 後操作結果為 \(a\),加入 \(1\) 後操作結果為 \(b\) 是否可行

轉移直接根據上面兩種情況加入 \(s_,s_\) 並模擬得到新的 \(f_\) 即可,複雜度是 \(\theta(n)\)

剩下的工作是乙個平凡的 \(\rm dp\) 套 \(\rm dp\),就是將狀態擴充套件到 \(f_\),其中 \(a,b,c,d\) 分別表示當前填入的串是否滿足加入 \(0/1\) 能得到 \(0/1\),可行則 \(a/b/c/d\) 為 \(1\)

轉移可以列舉 \((a/b,c/d)\) 中的全 \(1\) 對和 \(s_,s_\) 合併得到新的 \(\),這裡注意 \(a,b/c,d\) 是可以同時為 \(1\),因為這是表示通過所有可能操作是不是能得到該種棧

可以先 \(2^6\) 預處理每種 \((a,b,c,d),(s_,s_)\) 能轉移給什麼樣的 \((a',b',c',d')\)

複雜度是 \(\theta(2^}n)\),本題中 \(\sigma=|\|=2\)

code display

const int n=1e5+10;

int n,dp[n][2][2][2][2];

char opt[10],s[n];

tupletrans[2][2][2][2][2][2];

inline int calc(int a,int b,int c)

inline pairget1(int a,int b,int x,int y)

inline pairget2(int a,int b,int x,int y)

inline void upd(int &a,int &b,int &c,int &d,pairnow)

signed main()

if(a&&d)

if(b&&c)

if(b&&d)

trans[a][b][c][d][c1][c2]=tie(na,nb,nc,nd);}}

n=strlen(s+1);

rep(i,1,n) rep(a,0,1) rep(b,0,1) rep(c,0,1) rep(d,0,1) dp[i][a][b][c][d]=0;

dp[0][1][0][0][1]=1;

for(int i=1;i

題目中每個點 \(\rm sg\) 值就是該點到其自己子樹裡面所有點的最長路徑長度,全域性 \(\rm sg\) 值就是每個石子的 \(\rm sg\) 值異或起來

直接思考得到的瓶頸就是每個點每個兒子子樹內點作為根時最長路徑可能不一樣

這個瓶頸可以通過找「直徑中點」來突破!

我們令直徑中點為全域性根(如果直徑長度為偶數那麼隨便找乙個中點均可),此時若每個點在其子樹內點為此時的根,其對應的長度就是它在樹上的深度加一半直徑,否則就是子樹內最長路徑

偶數長度直徑對應的樹根稍特殊,如果當前根在直徑另乙個中點的子樹裡面那麼最長鏈是 \(\frac2-1\),否則是 \(\frac2\)

對以直徑中點為根的線段樹進行樹鏈剖分,子樹加/鏈加都是 「區間異或自己」 的模型,使用兩個線段樹分別維護向下的鏈長和向上的鏈長的異或即可

這裡有個比較簡潔的處理方式就是線段樹上每個區間維護 \(val_\) 區間異或自己的時候兩者交換,上傳的時候兩者更新為小區間對應的異或和

剩下的細節比較基礎,不再贅述

時間複雜度 \(\theta(n\log ^2n)\)

code displayvectorg[n];

int top[n],dfn[n],siz[n],tim,dep[n],son[n],fa[n],ord[n],n,q;

int edp=0,rt,mx[n],sec[n],up[n];

inline void get_edp(int x,int fat)

inline void dfs1(int x,int fat)

for(auto t:g[x]) if(t!=fat)

return ;

}inline void dfs2(int x,int topf)

int len[n];

struct seg

inline void push_rev(int p)

inline void push_down(int p)return ;

}inline void build(int p,int l,int r)

inline void flip(int p,int l,int r,int st,int ed)

inline int query(int p,int l,int r,int st,int ed)

}t1,t2;

inline void re_dp(int x,int fat) return ;

}inline int get_son(int x,int y) return son[y];

}int root=1;

inline void flip(int l,int r)

int mark,dialen;

inline int query()

int l=1,r=n,p=1;

while(l!=r)

if(!t1.rev[p])

}return ans;

}signed main()

rt=nodes[nodes.size()>>1];

dialen=nodes.size();

mark=nodes.size()&1?-1:nodes[nodes.size()/2-1];

memset(sec,-1,sizeof(sec));

dfs1(rt,0); dfs2(rt,rt);

rep(i,1,n) len[i]=mx[i]; t1.build(1,1,n);

re_dp(rt,0);

rep(i,1,n) len[i]=up[i]; t2.build(1,1,n);

while(q--)elseelse

}}else

if(dep[u]>dep[v]) swap(u,v);

flip(dfn[u],dfn[v]);

}root=read();

print(query());

}

return 0;

}

不難根據題目含義想到最大權閉合子圖,選擇一條邊的子圖是兩個點,點權是 \(-\lim\)

觀察題目中所給出的表示式:分母是集合大小 \(-1\) 而非集合大小本身

那麼列舉乙個額外的點表示強制這個點已經被選到集合中,將這個點和匯點的邊從圖中刪去表示已經付出 \(-\lim\) 的代價

此時表示式為 \(\sigma e-|s|\lim>0\) 是標準的最大權閉合子圖表示式,暴力做即可通過本題

注意不能刪掉和其在原圖上連的邊,只是選擇某條和強制被選的點在原圖中相連的邊的子圖變成了只有另乙個端點

這時複雜度是不正確的,乙個比較明顯的冗餘是每次重新增廣全圖,這是不優的,那麼強制選 \(i\) 時將網路流圖上和它相連的邊流量都設定成 \(0\) 就行了

code display

const int n=1e4+10,inf=0x3f3f3f3f;

int dep[n],head[n],cnt=1,n,m,lim;

struct edgee[n<<3];

inline void adde(int u,int v,int w); head[u]=cnt;

return ;

}inline void add(int u,int v,int w)

queueq;

int s,t,cur[n];

inline bool bfs()

}return dep[t];

}inline int dfs(int x,int in) if(!out) dep[x]=0;

return out;

}int u[n],v[n];

signed main()

rep(i,1,n) add(i,t,lim);

int flow=0;

while(bfs()) flow+=dfs(s,inf);

rep(x,1,n)

for(int i=head[x];i;i=e[i].nxt)

}flow--;}}

while(bfs()) flow+=dfs(s,inf);

if(m>flow) puts("yes"),exit(0);

} puts("no");

return 0;

}

考試總結 CQOI2017 考試總結

再奮鬥一年,爭取ak noip2016 cqoi2017 這是去年我立的flag。看考場,電腦挺快,而且配置和評測機一樣,可以放心的在自己的電腦上卡常測試啦,好評。碼了一道fft的題,沒網只好拷著回家交,鍵盤蜜汁小,enter佔據了兩行,旁邊還有關機按鈕。座位安排奧妙重重,和巴蜀dyf大神坐在一起。...

MBA考試總結

終於考完了 mba入學統考,兩年來參加了兩次,感覺還是挺辛苦和有壓力的。第一年沒有通過是因為之前了解太遲,大概準備了 20天左右,最後還是功成垂敗。09年其實也一直沒有心情複習的,逼到最後的 20天,狠了一把勁,還是狠狠的複習了幾天,貌似今年應該可以通過了。總結經驗如下 1 如果你決定去做一件事,請...

2016 7 14考試總結。

今天的考試,總的來說不難,但是考得很差,簡直 從中暴露出對知識的掌握不牢固,練習不夠等問題。1.求 方程x1 2x2 nxn m的所有非負整數解 x1,x2,xn 的個數。這個題目在加上取餘運算後就是乙個貨幣系統的問題。也就是揹包。難以接受自己連這是個揹包問題都沒看出來。3 2.其實邪狼王的貪婪也很...