原创 codeforces1203A關於循環移位的問題,字符串匹配

題意:n個數字組成的排列,問它們能不能通過循環移位形成1 2 3...n的序列或者是n...3 2 1 的序列。 比如2 3 4  5 1 和3 2 1 4 就可以,但是1 2 3 5  4 就不行。題的鏈接 對於這種問題可以兩個for循

原创 codeforces909d 字符串模擬

題意:有一個字符串,如果一個字符和它相鄰的字符是不同的話,就把它們都消除,問最多能進行幾次操作。如aabb,能進行2次操作。 題 題解:先把相鄰的同一種字符和它的個數數出來。然後進行模擬。每次模擬後,再進行合併。 #pragma war

原创 acwing 136 (set對結構體排序)

有n個數,從第二個數開始,要求輸出它前面的數中與當前數的最小的差值,以及那個數的下標。如果差值一樣,輸出較小的那個數的下標。 比如1 5 3 從5開始,5前面只有1,與 1的差值爲4,所以輸出4 1 對於3,和1,5的差值都爲2,但是1更

原创 生成哈夫曼樹

有n個數,把它們合成1個數,每次的代價是兩數之和,問最小代價。 哈夫曼樹的模板題,每次去兩個最小的數,相加,再把它們的和加入數組。 #include<iostream> #include<string> #include<cstring

原创 codeforces915c dfs

題意:一個數a和一個數b,不含前導零,移動a的數字的位置,使得a成爲比b小的最大的數。 題 題解:用一個數組存a中的數,一個數組存b中的數。從大到小對a排序。如果a的數字個數比b少,直接輸出。 如果是一樣長,記錄a中數字出現的次數,然後d

原创 codeforces1251C 奇偶性

題意:有一個序列,如果相鄰的兩個數的奇偶性不同,就可以把它們交換。問得到的最小的序列是什麼。 題目 不管怎麼交換,會發現所有的偶數的相對位置是不變的,所有的奇數的相對位置也是不變的。那麼要獲得最小的序列,就應該按順序取出一個奇數和一個偶數

原创 全排列,STL版,dfs版

獲取全排列,可以深搜dfs,也可以STL的next_permutatiion,和prev_permutation,頭文件algorithm STL真的方便,不過得注意奇奇怪怪的東西 next_permutatiion,和prev_perm

原创 二分法 codeforces782B

n個人在一條線上,他們有不同的速度和初始位置,問要把他們聚集到同一個點,至少需要多少時間。 二分時間就行,而不二分位置,二分時間的時候,判斷是不是可行解的條件是,能否使得所有的點在這個時間內到達一個區間。 #pragma warning

原创 codeforces900c Remove Extra One

題意:對一個長度爲n的排列,移除一個數字,使得record數的個數最多,record數是比它前面所有的數都大的數。 思路:想了很久還是沒有想到怎麼做,因爲1e5的數據有點大。刪除一個數之後,對於它後面的數來說,能不能成爲一個record數

原创 邊帶權並查集 +離散化 acwing 239

題意: 一個01序列s,有一些關係l r odd,或者是l r even,分別代表在[l,r]區間內,有奇數個1,有偶數個1.  問最早出現衝突的下標-1. 思路: 用前綴和的思想考慮,l到r的區間,1的個數的奇偶性,就是1~(l-1)的

原创 codeforces 1279c

有一個棧,裏面有n個元素,還有一個數組,要按數組的順序把它們從棧中取出,取出的方式是在棧中把這個元素前面的元素取出,然後把這個元素取出,再把前面的元素放回去,放回去的時候可以重新排序,使得接下來的操作數更少,問最少需要操作幾次。 思路:把

原创 acwing 151表達式求值(模擬)

這個題就是給一箇中綴表達式(普通算式)有+-*/和^(乘方)五種運算,而且有負數。 思路:先把中綴表達式轉化爲後綴表達式,然後根據後綴表達式,利用棧求值。(首先要知道後綴表達式求法和用法) 把中綴轉化爲後綴時,如果是數字就直接寫,如果有左

原创 &的性質 codeforces1013b

題目鏈接 題意:    給一個數組,一個數x,每次可以對一個數組元素進行操作:a[i]=a[i]&x。問最少進行幾次操作,可以使得數組中存在兩個相同的元素,也可以不進行操作。如果無法出現兩個相同的元素,輸出-1. 按位&的性質: ans=

原创 codeforces 610C

題意:有n個題,難題要花費b分鐘,簡單的花費a分鐘,(a<b)每個題有一個規定的期限,必須在這個時間之前完成它。求最多能夠完成幾道題。 思路:先按期限從小到大排序,數出總共的簡單題數量和總共的難題的數量,循環n次,判斷一下前面所花費的總時

原创 邊帶權並查集 acwing 238

題意: 有n列戰艦,有兩種操作,第一種,把一列戰艦放在另一列的後面,也就是合併操作,第二種是查詢操作,問兩個戰艦是不是在同一列,如果是的話,就輸出它們之間隔了多少個戰艦,如果不是就輸出-1. 思路: 用一個數組表示是不是在一個集合裏,然後