Time of Update: 2018-12-05
暴力不解釋#include<iostream>#include<vector>#include<map>#include<stack>#include<algorithm>#include<queue>#include<list>#include<set>#include<string.h>#include<stdlib.h>#include<math.h>#inc
Time of Update: 2018-12-05
暴力,先確定左右邊界,再遍曆y,注意剪枝#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include
Time of Update: 2018-12-05
#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include
Time of Update: 2018-12-05
匈牙利演算法的match數組已經是記錄對應的匹配,贊!有個技巧,因為要輸出字典序最大,按他的說法,就是第一個盡量大,所以應該從n向前找,最後sort一下。本人有點懶,匈牙利演算法代模板#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <string>#include
Time of Update: 2018-12-05
動態規劃 50題 題號 hdu--http://acm.hdu.edu.cnpku--http://poj.org一 hdu2182 Froghdu2185 Chess ==pku2626hdu1114(pku1384) Piggy-Bankhdu3281 ballshdu1502 Regular Words二 hdu1003 Max Sum p61hdu1081(pku1050) To The Maxhdu1500 Chopstickshdu2059 龜兔賽跑pku1160 Post
Time of Update: 2018-12-05
#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include
Time of Update: 2018-12-05
主要講了兩個演算法:包裹法和增量演算法。 個人感覺增量法比較好,整個過程只用到了+-*這集中運算,不涉及實數運算。 包裹法:首先確定一條一定為凸包上的線段,然後由這條線段為軸,像包紙一樣的往順時針(逆時針)包,碰到的第一個點就是凸包上的點,這時候又可以確定兩條直線,遞迴操作; 增量法:首先任選4個點形成的一個四面體,然後每次新加一個點; 分兩種情況:1.在凸包內,無視;
Time of Update: 2018-12-05
按位DP以我的理解就是在區間[A,B]內求出滿足某種性質的數的個數或是最值。例如統計區間[A,B]內不含前置字元為零且相鄰兩個數字之差至少為2的正整數這類問題都可以用按位DP解決。一般來說按位DP肯定有一維狀態是表示當前規划到數位前i位,那麼處理i+1位的所有狀態時有兩種情況:1.前i位不是上下界,這樣第i+1位可以取任何數。2.前i位是上下界,如果是上界的話,第i+1位就只能取小於等於上界B第i+1位的數。這樣按位dp就可以加一維狀態表達是否達到邊界來處理這兩種情況。再根據問題加若干維來處理不
Time of Update: 2018-12-05
Xij * ai - L * bj >= 0Xij * ai - U* bj <= 0兩邊取對數來去除ai,bj前面的係數有:logbj - logai >= logXij - logUlogai - log bj <=logL -
Time of Update: 2018-12-05
dp[][0]表示不包含49並且以非4結尾的個數dp[][1]表示不包含49並且以4結尾的個數dp[][2]表示包含49的個數所以轉移方程是:dp[k][0]=dp[k-1][0]*9+dp[k-1][1]*8;dp[k][1]=dp[k-1][0]+dp[k-1][1];dp[k][2]=dp[k-1][1]+dp[k-1][2]*10;實現:從最高位開始,固定每一位,枚舉數量。注意處理如49,549.。。之類的特殊數,要n+1#include <list>#include
Time of Update: 2018-12-05
簡單總結一下,雖說是test,但是難度比較適中,沒有特別難的。A求與算術平均值一樣的數的下標B數學題,畫出一棵類似二叉樹的東西就可以發現是求gcd的遞迴的深度,當其中一個數為1時就應該返回深度,注意有公用因子的數都不行,自己畫一棵樹理解一下#include <map>#include <set>#include <list>#include <queue>#include <deque>#include
Time of Update: 2018-12-05
#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include
Time of Update: 2018-12-05
題意:給出n個點,n-1條邊,問從節點0到最遠的子葉的距離滿足L<=dis<=R,且Bob總是選最大的,Alice總是選最小的,問最後能否滿足要求。方法:樹形DP,dis[u]數組表示0節點到當前節點u的距離,dp[u]數組表示最遠的子分葉節點到u節點的滿足要求的距離,最後dp[0]就是答案。這dp妙就妙在利用了的dfs回溯,從最遠子節點到0節點進行dp貼一個TLE代碼,有空a了他!#include <list>#include <map>#include &
Time of Update: 2018-12-05
排到rank3 ,有點意外,紀念一下3leo62MS972K1555BC++2011-09-03 23:11:19#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include
Time of Update: 2018-12-05
判是否是歐拉迴路,方法:先判連通性,再判度數是否全是偶數#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include
Time of Update: 2018-12-05
兩次二分,因為題意是求m次能過河的前提下最小跳躍長度,第一次二分是對答案二分,第二次是對石頭二分那個lower_bound雖好用,不過它只能返回的id的值小於val,也就是說有數組a[0]=0,a[1]=2,a[2]=6,lower_bound(a,a+n,6)-a=1,即a[1]=2,正確是返回2,即a[2]=6,所以這時候應該處理一下。#include <list>#include <map>#include <set>#include
Time of Update: 2018-12-05
這類題可當模板。詢問最左邊閒置數,添加一段,刪減一段。具體解釋可看這裡struct tree{ int l,r,lv,rv,cv,state;}T[N];void init(int i){ T[i].lv=T[i].rv=T[i].cv=T[i].state==0?T[i].r-T[i].l+1:0;}void build(int l,int r,int i){ T[i].l=l,T[i].r=r; T[i].state=0; //空閑!
Time of Update: 2018-12-05
這題對最短路小小的變形,普通的最短路權值在邊上,而這道題權值在點上!所以,代模板也要講究技巧,具體表現在對dis[x]值的初始化上,具體看代碼,最好畫圖理解透徹!//複雜度O(n^2)#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <string>#include
Time of Update: 2018-12-05
因為常規的凸包是逆時針存的,所以只要找出左上方的點,然後逆著回去就ok!原模板沒判斷共點情況,害得wa了n次!!!#include<iostream>#include<vector>#include<map>#include<stack>#include<algorithm>#include<queue>#include<list>#include<set>#include<string.h&g
Time of Update: 2018-12-05
0ms秒殺。。。#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include