/*查詢包含當前點在內的最長連續子段思路:在左邊找最大破壞點,右邊找最小破壞點,相減後減1即可最開始寫的遞迴線段樹,挫了- -,而且還完全想不通,趕腳不會愛了。於是用zkw線段樹自底向頂搞,AC了。傳說有區間合并做法,費時費力,不寫了留待有緣人哈哈。。*/#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int MAXN =
/*題意:區間詢問最長連續上升子段的長度,支援區間增減差不多快切成模板題了,依舊是注意詢問時的區間合并。我時間幾乎被卡,但是貌似大家都是線段樹區間合并的做法,為什麼時間差這麼大呢。。略花了點時間探究了一下,結論:傳參會對時間有略微影響,主要的原因是,define的max,min,比函數的寫法慢很多。不知道是不是OJ的原因*/#include <stdio.h>#include <string.h>#include <algorithm>using
樹形DP+分組背包題意:從n座城堡中選m座城堡使財寶總量盡量大。有的城堡需要先攻克其他特定的一座城堡思路:明顯的樹形結構,增加一個虛擬0節點就是一棵樹。設狀態dp[i][j]為在以i為根的子樹上選擇j個節點的財富最大值;在非0節點上的其他點都必須選擇他自己,所以非0節點從1開始記數。華麗麗的被卡了一天,即使到現在重寫第3次AC了還是不知道為什麼錯。頭疼啊頭疼#include <stdio.h>#include <string.h>#include
樹形DP+分組背包題意: 給一個樹,0節點具有無限能源,邊權值表示邊最大能源流通量,非0節點權值表示點亮該節點需要的能源(允許0),求最多能點亮多少個節點。思路: 狀態dp[i][j]表示以i為根的子樹話費j能源能點亮的節點最大值。每個節點的背包容量上限為該節點到其父親的那條邊的邊權其實很水的一道DP。本人卡了一天多的原因,完全是因為背包沒有掌握好,對0權值節點處理不當T_T#include <stdio.h>#include <string.h>#include
題意:給一個數n,和m個0~9的數字,問n或者n的倍數能不能只由這m個數字組成,能的話輸出最小的那個,不能輸出0.解法:BFS搜之。但是單純的暴力肯定不行,因為你不能判斷不能組成的情況。由 (a*x+b)%n == ((a%n)*x+b)%n
普通平衡樹的功能主要有 插入 刪除 一個數 找 前驅 後繼 第k大 小求大於等於或小於等於某個數的個數(可以求逆序數)確定一個數的排名我把所有的功能整合在了一起了,代碼如下#include<cstdio>#include<cstdlib>const int inf = ~0u>>2;#define L ch[x][0]#define R ch[x][1]#define KT (ch[ ch[rt][1] ][0])const int maxn =
真的是一個致命的弱智錯誤;注釋後帶change:的是原來的代碼;我想著,最後遲早time要+1的,提前+1 和後來+1 應該一樣。可是 問題就處在這兒。後面 還有對time的奇偶性的判斷, 如果事先加了1就會改變奇偶性了;真的是低級錯誤; 花了我一天時間了。錯誤出現了也是好事,起碼我解決了這個錯誤;希望以後不會再犯了;在此謝謝張晨陽,一語道破;ok。。。continue;/* *Author ID:fuqiang11 *Problem ID:HDU 1180 *Submit Time:2
題意: 給一副有向圖,問源點到其他的距離和其他點到源點的距離之和。解法: 建兩幅圖,另一幅圖的邊全部相反,然後用dijkstra求兩遍源點到其他點的最短路即可。北大的這題會卡vector,TLE6次後怒改手寫鄰接表,然後1.9sAC- -!!然後是題目說好的權值和不大於1e9,但是但是,顯而易見,answer是可以大於權值和的,必須lld。。。。相當的無語啊#include <stdio.h>#include <string.h>#include
下課後直接奔實驗室,月賽都快結束了,我擦,隨便挑了一道題開始搞起來,是我喜歡的圖論,心裡暗暗欣喜,可是還是有點繞人,比賽結束剛好敲完,吃晚飯後,調了調,AC,呵呵比賽的時候A的貌似很少,其實也不太難連結:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3649下面是我做過的倍增法求LCA以及倍增的DP的兩個練習題http://blog.csdn.net/haha593572013/article/details/77964
樹形DP+分組背包題意: 給一棵n個節點的樹編號1~n,要從中截出一棵k個節點的樹,最少需要刪除幾條邊思路:
以左上方座標 為參考。每次移動要判斷整個身體所在的位置 是否滿足可移動 條件/* *problem ID: HDU 2531 * Author ID: fuqiang11 * TIME: 2013-07-20 * Algorithm: 搜尋 BFS * Status: (Accept) */ #include <iostream>#include <cstdio>#include <cstring>#include <
真是頭大。老是犯些超級低級的錯誤;數組我存的時候下標寫的是 1 開始,我用check函數判斷的時候寫的確實 a.x<0||b.x<0一個錯誤找一天。唉。。。說多了都是淚;發現錯了就重新拍代碼,拍了還是犯這樣的錯; 絕對是太粗心了;///////////////////////////////////********************思路:對每個點 進行走路和飛行的判斷和遍曆;visit 三位元組 存放當前點 當前magic是否遍曆過。********************/
/*題意:對一段連續記憶體的重設,申請,釋放,詢問思路:New和Get是為區間合并,Free的查詢時單點更新到底,Free的釋放是成段更新特別注意Get的合并,這裡卡了半天才發現。總結:其實就是三種線段樹的綜合,能定下心認真分析是不難的,多思考,戒急燥!AC!!!!也就是在家裡沒網沒百度,硬生生自己想了兩天終於搞出來了,還好2A不然不愛了。。一個心情大好,用手機熱點寫部落格,算了不管了,流量傷就傷吧。。線段樹就是越寫越長,資料結構的通病麼。。。*/#include <stdio.h>
不一樣的二分;思路: *二分的上限下限是:MAX(最大的數字),SUM (總和); *其中一定有一個數字滿足,將N分成M份; *求最小的;只要當它達到M份時,依然減小上屆值;演算法不難,思路想到了就 水到渠成了;/* *problem ID: POJ 3273 * Author ID: fuqiang * TIME: 2013-07-17 * Algorithm: 二分 * Status: (Accept) */ #include
題意: n個人玩石頭剪刀布,每個人每次出的手勢都是一樣的,除了裁判(裁判可以任意出)。現在給出他們之間的勝負關係,問哪一個是裁判,並輸出最早是在哪一行確定的。解法: 枚舉裁判,然後對裁判外的其他人作類似於食物鏈的並查集操作,如果只存在一次一個人刪除後其餘人不出錯的情況,那麼那個人就是裁判。最早確定是裁判的那行一定是最遲出錯的那一行。筆者表示想不出證明。#include <stdio.h>#include <string.h>#include
http://acm.hdu.edu.cn/showproblem.php?pid=2531題意:橄欖球誒、、、超喜歡四分衛的說。好吧,題目其實很簡單,BFS搜尋,不過一開始沒看懂嗎,為什麼有多個D和Q,蛋疼過後才發現那是球員的身體的一部分。ORZ嗯,我是把防守隊員的身體儲存在一個結構體裡面,每次判斷是否身體會觸碰O即可。/** Danceonly*/#include <cstdio>#include <cstdlib>#include
http://acm.hdu.edu.cn/showproblem.php?pid=2612題意 : Y和M去同一個KFC的時間最短(KFC可能有多個)我的方法是從KFC開始搜尋到兩個人的最短時間之和。唯一蛋疼的是一開始TLE了幾把。傷啊。/** Danceonly*/#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using
分別記錄下0和1的連續段,異或就是把01值交換,不難,想清楚再敲#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ls (rt<<1)#define rs (rt<<1|1)const int M =
一天一個錯誤,找死人了;有些東西,看似沒錯;可是online juge 就是給你報錯,那99% 你就是錯了考慮的東西不全面,錯了也活該;剛開始visit 弄了二維的,覺得沒錯,因為自己拿著k=2舉例子,其實你換個數,比如k=5 你就會發現,我們這個visit還需要加一維visit[x][y][z] 表示的是點 (x,y) 在z狀態下是否已經經曆過;這個z為 時間對k的餘數; 比如對於5來說,在同一個點,t=10
好像又可以叫函數式線段樹,反正主要思想就是充分利用曆史資訊,共用空間,具體的看論文吧這裡講的比較詳細 http://hi.baidu.com/wyl8899/item/e00796a9cb2df73d020a4d68這題A的太爽了* _ *看CLJ標稱的時候用的是動態申請記憶體的線段樹,非常不習慣-