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給俱樂部的孩子們準備了一堆的禮物,它生成了乙個隨機數列表aa,使得第i個人會得到a i 件禮物。但是,因為某些人得到的禮物太多,為了公平起見,mxj建議大家把禮物平均分配。題目描述 大家圍成了乙個圈,每個人可以向他左邊或者右邊的人傳遞禮物,問,至少傳遞多少件禮物,才能讓每... win dbre aker windbreaker windbr eake r計畫送一些項鍊給他的朋友們。他購買了n nn種珍珠,每種珍珠都有特定的顏色。他要製作的項鍊都是m m m 完美的,也就是每條項鍊都是恰好由m mm種珍珠組成的。w in dbre aker windbreaker wind...給大家的新年禮物
mxj的新年禮物 貪心
Jzoj 2307 新年禮物