新年禮物綜合題DAY2

2021-09-07 09:28:33 字數 3636 閱讀 7903

t1:

題目概述:

設rr是個2^k2k 進製數,並滿足以下條件:

(1)r至少是個22位的2^k2k 進製數。

(2)作為2^k2k 進製數,除最後一位外,rr的每一位嚴格小於它右邊相鄰的那一位。

(3)將rr轉換為22進製數qq後,則qq的總位數不超過ww。

在這裡,正整數k(1≤k≤9)k(1≤k≤9)和w(k問:滿足上述條件的不同的r共有多少個?

我們再從另一角度作些解釋:設ss是長度為ww 的0101字串(即字串ss由ww個「00」或「11」組成),ss對應於上述條件(33)中的qq。將ss從右起劃分為若干個長度為kk的段,每段對應一位2^k2k進製的數,如果ss至少可分成22段,則s所對應的二進位制數又可以轉換為上述的2^k2k進製數rr。

例:設k=3,w=7k=3,w=7。則rr是個八進位制數(2^3=823=8)。由於w=7w=7,長度為77的0101字串按33位一段分,可分為33段(即1,3,31,3,3,左邊第一段只有乙個二進位制位),則滿足條件的八進位制數有:

22位數:

高位為11:66個(即12,13,14,15,16,1712,13,14,15,16,17),

高位為22:55個,

…,高位為66:11個(即6767)。

共6+5+…+1=216+5+…+1=21個。

33位數:

高位只能是11,

第22位為22:55個(即123,124,125,126,127123,124,125,126,127),

第22位為33:44個,

…,第22位為66:11個(即167167)。

共5+4+…+1=155+4+…+1=15個。

所以,滿足要求的rr共有3636個。

首先,設乙個二維陣列,dt[i][j],表示在最高位為i的情況下,有j位的方案數,不難得出,顯然,對於每乙個數,只要另乙個數大於它的上一位就可以發生遞推關係,而遞推結果為dt[i][j]=dt[i+1][j-1]+***x+dt[2^k-i+1][j-1],簡而言之,就是f[i][j]=f[i+1][j]+f[i][j-1]。最後對w<=k時的情況進行一次特判就ac了。

t2:公元20442044 年,人類進入了宇宙紀元。

l 國有 nn 個星球,還有 n-1n−1 條雙向航道,每條航道建立在兩個星球之間,這 n-1n−1 條航道連通了 ll 國的所有星球。

小 p 掌管一家物流公司, 該公司有很多個運輸計畫,每個運輸計畫形如:有一艘物流飛船需要從 u_iui​ 號星球沿最快的宇航路徑飛行到 v_ivi​ 號星球去。顯然,飛船駛過一條航道是需要時間的,對於航道 jj,任意飛船駛過它所花費的時間為 t_jtj​,並且任意兩艘飛船之間不會產生任何干擾。

為了鼓勵科技創新, ll 國國王同意小 pp 的物流公司參與 ll 國的航道建設,即允許小pp 把某一條航道改造成蟲洞,飛船駛過蟲洞不消耗時間。

在蟲洞的建設完成前小 p 的物流公司就預接了 mm 個運輸計畫。在蟲洞建設完成後,這 mm 個運輸計畫會同時開始,所有飛船一起出發。當這 mm 個運輸計畫都完成時,小 pp 的物流公司的階段性工作就完成了。

如果小 pp 可以自由選擇將哪一條航道改造成蟲洞, 試求出小 pp 的物流公司完成階段性工作所需要的最短時間是多少?

輸入格式:

第一行包括兩個正整數 n, mn,m,表示 l 國中星球的數量及小 p 公司預接的運輸計畫的數量,星球從 11 到 nn 編號。

接下來 n-1n−1 行描述航道的建設情況,其中第 ii 行包含三個整數 a_i, b_iai​,bi​ 和 t_iti​,表示第 ii 條雙向航道修建在 a_iai​ 與 b_ibi​ 兩個星球之間,任意飛船駛過它所花費的時間為 t_iti​。資料保證 1 \leq a_i,b_i \leq n1≤ai​,bi​≤n 且 0 \leq t_i \leq 10000≤ti​≤1000。

接下來 mm 行描述運輸計畫的情況,其中第 jj 行包含兩個正整數 u_juj​ 和 v_jvj​,表示第 jj 個運輸計畫是從 u_juj​ 號星球飛往 v_jvj​號星球。資料保證 1 \leq u_i,v_i \leq n1≤ui​,vi​≤n

輸出格式:

乙個整數,表示小 pp 的物流公司完成階段性工作所需要的最短時間。

解答分兩個部分:

1、求出給出各點對之間的距離

2、將一條邊權減為0使得最大距離最小

樹上距離一看就自然想到了【樹鏈剖分+樹狀陣列(或線段樹)】,先樹剖給點編號,然後套用樹狀陣列結合lca的演算法求出點對距離,1問秒掉

關鍵是第二問,如何刪。

容易想到要選的邊一定在最長的路徑上,但選最長路徑上最長的邊不一定是對的,因為第二長的邊可能與第一長的邊有公共邊且不相差多少,但是刪去了乙個非公共邊就錯了。

看到最大最小,自然想到二分答案:

我們二分蟲洞後最長的邊的長度,對於每乙個check(m),只需列舉所有比m大的路徑,這些路徑都得縮短,將這k條路徑上每一條邊+1,這樣一來加到了k的那些邊就是所有邊的公共邊,再看一看他們能不能通過減為0而使這k條邊都小於m。

具體怎麼維護每條邊加了幾次,用線段樹?

這樣二分nlognlogn的複雜度,還是不太放心

鑑於所有的詢問都是單點且都在修改之後,我們可以用差分陣列以o(n)的總複雜度求出

還是挺優秀的效率

#include

#include

#include

#include

#define lbt(x) (x&-x)

using namespace std;

const int maxn=300005,inf=2000000000;

inline int read()

while(c>=48&&c<=57)

return out*flag;

}int n,m,root,rtm=inf,maxw;

//這塊是存邊【鏈式前向星】

int head[maxn],nedge=0;

struct edgeedge[2*maxn];

inline void build(int a,int b,int w);

head[a]=nedge++;

edge[nedge]=(edge);

head[b]=nedge++;

}struct nodep[maxn];

inline bool operator <(const node& a,const node& b)

//這塊求重心

int siz[maxn];

void dfs(int u,int f)return ans;}

inline int query(int l,int r)

inline void init()

int solve(int u,int v)

int d[maxn];   //差分陣列

inline void update(int u,int v)

bool check(int m)

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

}return false;

}int main()

sort(p+1,p+1+m);  //路徑排個序

maxw=r;

while(l>1;

if(check(mid)) r=mid;

else l=mid+1;

}cout

}

給大家的新年禮物

感冒持續中,睡到下午才起來,也沒什麼安排,所謂2007年的最後一天,大概也就這樣過去了吧。雖然從理論上來說,每一分 每一秒長度相等,今年和去年 今年和明年並未有何不同,但是我真的覺得,我們的時間,也有重力加速度。生命中的頭乙個十年,因為懵懂而格外漫長,大部分時間都在睡覺。到了第二個十年,日子被學習劃...

mxj的新年禮物 貪心

題目背景 在新的一年,mxj給俱樂部的孩子們準備了一堆的禮物,它生成了乙個隨機數列表aa,使得第i個人會得到a i 件禮物。但是,因為某些人得到的禮物太多,為了公平起見,mxj建議大家把禮物平均分配。題目描述 大家圍成了乙個圈,每個人可以向他左邊或者右邊的人傳遞禮物,問,至少傳遞多少件禮物,才能讓每...

Jzoj 2307 新年禮物

win dbre aker windbreaker windbr eake r計畫送一些項鍊給他的朋友們。他購買了n nn種珍珠,每種珍珠都有特定的顏色。他要製作的項鍊都是m m m 完美的,也就是每條項鍊都是恰好由m mm種珍珠組成的。w in dbre aker windbreaker wind...