2020 09 03 04 考試題目題解

2022-05-01 19:42:12 字數 3850 閱讀 6764

題目傳送門

給出乙個圖,保證每個點有且僅有乙個出邊,對於每個點把它走 \(k\) 步這條路徑上的所有的點答案加 1 ,問最後每個點的答案。

\(n\le 5\times 10^5\)

考試的時候 sb 了,沒想出來怎麼做。

首先你可以發現這其實是個基環樹森林,對於不在環上的點,它答案其實就是子樹內深度與它相差不超過 \(k\) 的點的數量。考慮在環上的點,顯然它們還要考慮環上其他點對該點產生的貢獻。

具體實現的話我們可以斷開一條邊使得變成森林,然後求點的數量可以用樹狀陣列解決,然後如果每次都需要清空的話時間複雜度就會降到 \(\theta(n^2)\) ,所以我們可以只考慮增長量。時間複雜度 \(\theta(n\log n)\) 。

vector e[maxn];

int n,k,cutu,cutv,f[maxn],sum[maxn],vis[maxn],lim[maxn],ans[maxn];

int lowbit (int x)

void modify (int x)

int query (int x)

void dfs (int u,int dep)

signed main()

for (int i = 1;i <= n;++ i) write (ans[i]),putchar ('\n');

return 0;

}

題目傳送門

一開始有 \(n\) 個點,每個點都兩個權值 \(a,b\) ,如果存在集合 \(s\) 使得對於 \(k\) 存在 \(a_i\+b_k\ge h\) ,那麼我們就可以把答案加 1,但是後面的集合就不能包含該點。

問答案的最大可能值。\(n\le 2\times 10^5\)

考試的時候像個弱智一樣,寫了乙個偽貪心,然後寫了乙個平衡樹,結果只把後面比較水的資料騙過去了,還沒有亂搞得的分多。。。

正解其實是個反悔貪心,我們按照 \(a+b\) 排序,然後你發現如果我們把滿足的點存下來,每次如果當前點可以那麼,那就直接加進去,否則就把最強的拉下來,把這個救上去。

時間複雜度 \(\theta(n\log n)\) 。

int n,h,ans;ll suma;

priority_queue q;

struct node

}peo[maxn];

signed main()

write (ans),putchar ('\n');

return 0;

}

題目傳送門

定義 \(\\) 合法,當且僅當 \(\sum_^a_i=n\),定義 \(\\) 合法,當且僅當 \(\sum_^b_i=m\),定義 \(\\) 的權值為 \(\prod_^\min(a_i,b_i)\),問所有合法 \(\\) 的權值之和。

有 \(t\) 次查詢,每次給出 \(n,m,k\) 。\(t\le 100,n,m,k\le 5\times 10^5\)

考試的時候隨便推了一下,騙了 \(60\) 分就沒有想了,主要是因為沒想到二元生成函式,想到了之後就很簡單了,直接推式子就可以了。

你發現,其實答案就是 :

\[(\sum_\min(a,b)x^ay^b)^k[x^ny^m]

\]證明顯然。

然後你把上面那個東西寫出來,你發現其實就是:

\[1xy+1xy^2+1xy^3+...\\1x^2y+2x^2y^3+2x^2y^4+...\\1x^3y+2x^3y^2+3x^3y^3+3x^3y^4+...

\]然後你用等差比公式推一下發現其實就等價於:

\[\frac

\]然後求這個東西的 \([x^ny^m]\) 可以直接用隔板法,具體來說就是列舉 \(xy\) 的次數。

時間複雜度 \(\theta(tn)\) (假設 \(n,m\) 同階)。

read (n,m,k);

int ans = 0;

for (int i = 0;i <= n - k && i <= m - k;++ i)

ans = add (ans,mul (binom (k + i - 1,i),mul (binom (n - i - 1,n - k - i),binom (m - i - 1,m - k - i))));

write (ans),putchar ('\n');

嘗試了頭鐵打法然後**了。。。

給出乙個 \(n\) 個點,\(m\) 條帶權邊的圖,需要依次訪問 \(2k\) 個點,你有兩個傳送門,傳送門放置時必須保證為當前位置,傳送門之間可以瞬間傳送,問訪問完所有點的最小路徑長度。

\(n\le 300,m\le 4000,k\le 300\)

考試的時候猜到了乙個顯然的結論結果沒想到用 dp ,然後。。。

首先有乙個顯然的結論,就是說有乙個傳送門肯定就在我的腳下,然後我們可以設 \(dp[i][j]\) 表示訪問了前 \(i\) 個點,另外乙個傳送門在 \(j\) 的最小路徑長度。顯然,\(dp[0][1]=0\)。轉移式的話我們可以想到肯定只會在 \(dp[i-1][k]\) 之間轉移,其中 \(k\) 是上一次的傳送門的位置,然後你列舉一下情況就可以得到轉移式了,具體見**。

dp[0][1] = 0,a[0] = 1;

for (int i = 1;i <= k * 2;++ i)

}int ans = dp[k * 2][1];

for (int i = 1;i <= n;++ i) ans = min (ans,dp[k * 2][i]);

write (ans),putchar ('\n');

有乙個 \(n\) 個點的邊帶權的樹,你每次可以加邊或者刪邊,但需要保證任意時刻存在的環上的權值異或之值為 \(0\)。問最後 \(n-1\) 條邊的最小邊權之和。

\(n\le 10^5\)

被wxk和llsw騙了,實際上這道題目沒有很難(也有可能是因為自己沒做)

我們可以發現如果兩個點之間要加邊,那麼,邊權一定是固定的,因為如果構成的環上的不管怎麼變邊權都是相同的(異或值為 \(0\)),可以想到如果定義 \(p[u]\) 表示 \(1\to u\) 的路徑異或值,那麼 \(u,v\) 之間的邊權就是 \(p[u]\otimes p[v]\)。於是我們就可以對 \(n^2\) 條邊做最小生成樹。

但是這樣顯然很慢。我們可以想到,如果從高到低位考慮,那麼對於當前位而言,我們應該盡量邊相鄰兩點該位分別為 \(0,1\) 的邊的數量最少,那顯然就只連 \(1\) 條邊,而且這裡很方便的是不需要考慮不連通的問題(有 \(n^2\) 條邊)。那我們可以直接分治,每次把該位為 \(0\) 的分治構成一棵樹,該位為 \(1\) 的構成一棵樹,然後兩棵樹之間連一條邊權最小的邊。於是問題就是如何找到邊權最小的邊,然後你發現這個東西直接用 01trie 樹解決就好了。

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

ll ans;

int n,tot,p[maxn],rt[maxn],cnt[maxn * 31],son[maxn * 31][2];

void ins (int a,int b,int t,int x)

int query (int a,int b,int t,int x)

int toop = 1,to[maxn << 1],wei[maxn << 1],nxt[maxn << 1],head[maxn];

void add_edge (int u,int v,int w)

void dfs (int u,int fa)

}void dfs (int t,int l,int r)

dfs (t - 1,l,pos - 1),dfs (t - 1,pos,r);

if (pos - 1 >= l && pos <= r)

}signed main()

c 考試題目

一 專案提問 題 1 實現根號,要求最終與目標值的精度不大於0.0001 2 原題,求集合的子集c 的虛函式?innodb引擎的索引結構?為什麼是b 樹?三條查詢語句是否命中聯合索引?同步非同步阻塞非阻塞?為什麼是三次握手 四次揮手?timewait的意義?二 專案提問tcp ip5層協議 列舉協議...

Python考試題目記錄

考試時沒能完全寫出來,題目記不太清了,記錄一下,不知道答案對不對。僅做參考,不保證 的正確性!給出乙個列表l,找出支配元組 支配元組 列表l中有兩個元組t1,t2,if t1 0 t2 0 and t1 1 t2 1 and 至少有乙個元素,小於對應位置的元素 t1支配t2,要找t1 分析 1 先排...

經理人考試題目

1.你新到這家公司,公司上下都講人事部主管是 老闆的人 人事部主管的權利很大,也很有號召力,你調動不了的人和事他都可以調動得了,你明顯的感覺到這位主管對你在這家企業的發展是個 絆腳石 某天,人事部主管向你報告,人事部的公章在他的抽屜裡不翼而飛,丟了。你將會如何處理公章事件和人事部主管這個難題?2.你...