source:noip2016-rzz-2 t3
給出這樣一棵「二叉樹」:
下面是乙個例子:
每一條圖上的路徑用乙個字串表示,字串中的每乙個字元表示乙個移動。字元僅包含如下五種:
用一條路徑來表示這條路徑的終點,例如路徑:221lu 就表示上圖中的節點 a 。
給出兩條路徑,你的任務是求出著兩條路徑的終點之間的最短路。
輸入兩行,每行乙個字串,分別表示兩條路徑。
輸出一行乙個整數,表示能得到的串的總數。
輸入
221lu輸出12l2
3【資料規模與約定】
用 d 表示所有經過的節點中,深度最大的節點的深度;s 表示輸入字串的最大長度。
對於 10% 的資料,d≤10。
對於 30% 的資料,d≤50。
對於 50% 的資料,d≤1000。
對於 70% 的資料,d≤20000。
對於 100% 的資料,d≤100000;s≤100000。
#include#include#include#includeusing namespace std;
struct nodetrans[270000];
int string_s[100003],string_t[100003],string_s_n,string_t_n;
void put(int x)
while(x);
while(num) putchar(c[num--]);
putchar('\n');
}void build_a_tree(int left,int right,int now)
void add_lazy(int now,int lazy)
void push_down(int now)
}void update(int now)
void modify(int left,int right,int now,int x,int y,int z)
int query_left(int left,int right,int now,int x)
int query_right(int left,int right,int now,int x)
void tree_export(int left,int right,int now,int x,int *_string)
int middle=(left+right)>>1;
push_down(now);
tree_export(left,middle,now<<1,x,_string);
tree_export(middle+1,right,now<<1|1,x,_string);
}void read(int *_string,int &string_n)
case '2':
case 'u':
case 'l':
case 'r':
} }tree_export(1,char_length,1,string_n,_string);
delete character;
}int main()
if(string_s[i]!=string_t[i]&&flag)
if(distance>answer) break;
answer=min(answer,distance+!flag+2*(_n-i));
} put(_summary+answer);
return 0;
}
CodeVS1021 瑪麗卡 最短路 線段樹
題目鏈結 宣告 感謝fzw kryj 的創意和熱心講解 麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修...
HNOI2014 道路堵塞 最短路,線段樹
對不起對不起,辣雞蒟蒻又來用核彈打蚊子了 完全ignore了題目給出的最短路,手工搞出乙個最短路,發現對答案沒什麼影響 所以乾脆轉化為經典問題 每次詢問刪掉一條邊後的最短路 如果刪掉的是非最短路邊,那麼顯然毫無影響 如果刪掉的是最短路邊,那麼我們倒過來,考慮這個時候每條非最短路邊的貢獻。對於一條非最...
迷宮的最短路線(BFS
迷宮的最短路線 bfs 題目 給定乙個大小為n m的迷宮。迷宮由通道和牆壁足證,每一步可以向鄰接的上下左右四格的通道移動。請求出從起點到終點所需要的最小步數。請注意,本體假定從起點一定可以移動到終點。限制條件 n,m 100 思路 1.初始化迷宮maze i j 並對其每乙個位置附上乙個很大的值來表...