Time of Update: 2018-12-04
又是莫名其妙做出來的,不知道怎麼證明自己使用的方法,求解!! Problem DescriptionIgnatius found some bones in an ancient maze, which fascinated him a lot. However, when he picked them up, the maze began to shake, and Ignatius could feel the ground sinking. He realized that the
Time of Update: 2018-12-04
真·最大二分匹配寫法。跟著自己思路寫的比標準寫法複雜太多了。Problem DescriptionConsider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is possible to form a committee of exactly P students that
Time of Update: 2018-12-04
求多個字串的最長公用子串,若有多個輸出字典序最小。先複習一下,(i,j)表示排名i、j的串的最長公用首碼。(i,j) =
Time of Update: 2018-12-04
#include <set>#include <map>#include <list>#include <cmath>#include <ctime>#include <deque>#include <queue>#include <stack>#include <cctype>#include <cstdio>#include <string>#include &
Time of Update: 2018-12-04
考慮一個事件,它有兩種機率均等的結果。比如擲硬幣,出現正面和反面的機會是相等的。現在我們希望知道,如果我不斷拋擲硬幣,需要多長時間才能得到一個特定的序列。序列一:反面、正面、反面序列二:反面、正面、正面 首先,我反覆拋擲硬幣,直到最近的三次拋擲結果形成序列一,然後我記下這次我拋擲了多少次才得到了我要的序列。重複執行這個過程,我可以算出得到序列一平均需要的拋擲次數。同樣地,反覆拋擲硬幣直到序列二產生,它所需要的次數也有一個平均值。你認為這兩個平均值哪一個大哪一個小?換句話說,出現序
Time of Update: 2018-12-04
一.動態規劃參考資料:劉汝佳《演算法藝術與資訊學競賽》《演算法導論》推薦題目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 簡單http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,經典TSP問題http://acm.pku.edu.cn/JudgeOnline/problem?id=2411
Time of Update: 2018-12-04
一個正整數n的階乘就是前n個正整數的乘積,我們通常需要n-1次乘法操作來算出精確的值。不像等差數列求和、a的n次冪之類的東西,目前求階乘還沒有什麼巨牛無比的高效演算法,我們所能做的僅僅是做一些小的最佳化。更少的乘法運算次數? 在高精度運算中,乘法計算的速度遠遠慢於加減法,因此我們有必要減少乘法運算的次數。下面我將做一個非常簡單的變換,使得計算階乘只需要n/2次乘法。繼續看下去之前,你能自己想到這個演算法來嗎? 我們可以把一個數的階乘轉換為若干個平方差的積。例如,假如我想求9!,我
Time of Update: 2018-12-04
#define SIZE 200005 char S[SIZE];int N,sa[SIZE], height[SIZE], rank[SIZE], tmp[SIZE], top[SIZE]; int rmq[SIZE][20]; //S[] 字串//N 字串長度//rank[i] i是第幾名 //sa[i] 第i名是什麼//height[i] 第i名和第i-1名的最長公用前置長度//名次:1~N序號:0~N-1void makesa(){ // O(SIZE * log SIZE)int i,
Time of Update: 2018-12-04
把別人的數獨代碼改了下就當自己模板了=。=,聽說要啟發函數效率才高=。=,下次再改改吧=。=#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define RN 1000#define CN 500#define NN 6000class DLX{private:int U[NN],D[NN],L[NN],R[NN];//每個節點的上下左右節點int SUM[CN],
Time of Update: 2018-12-04
1022、1027、1030、1035、1128、1165、1209、1210、1215、1222、1228、1229、1230、1237、1259、1276、1286、1337、1342、1361、1370、1506、1577、1597、1702、1716、1727、1868、1870、1896、1981、1986、1987、1988、1997、1998、1999、2058、2062、2089、2090、2094、2104、2116、2117、2135、2175、2183、2184、2197、
Time of Update: 2018-12-04
/*==================================================*\ | 3D凸包 | CALL: 構建凸包 = construct(); \*==================================================*/ #define TPN 1010struct TPoint{ double x,y,z; void
Time of Update: 2018-12-04
/*==================================================*/| 求N!最右位非0數| CALL: 最小圓 = lastdigit(char *buf);/*==================================================*/#define maxn 10000int lastdigit(char *buf){const int mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,
Time of Update: 2018-12-04
問題 J:
Time of Update: 2018-12-04
Splay Tree
Time of Update: 2018-12-04
中國象棋中的跳馬問題題目描述現在棋盤的大小不一定,由p,q給出,並且在棋盤中將出現障礙物(限制馬的行動,與象棋走法相同)輸入第一行輸入n表示有n組測試資料。每組測試資料第一行輸入2個整數p,q,表示棋盤的大小(1<=p,q<=100)。每組測試資料第二行輸入4個整數,表示馬的起點位置與終點位置。(位置的取值範圍同p,q)第三行輸入m表示圖中有多少障礙。接著跟著m行,表示障礙的座標。輸出馬從起點走到終點所需的最小步數。如果馬走不到終點,則輸入“can not reach!”範例輸入2
Time of Update: 2018-12-04
收縮有向圖中的強連通分量大約是圖論的線性演算法中最具技巧性一種了。我們的首要目的是對於每個頂點設定一個Belong值,也就是它從屬於哪個頂點所代表的強連通分量,至於重建立立圖的邊,不過是將所有邊掃描一遍看是否在新圖中出現而已,比較容易。下面是利用一遍DFS求強連通分量的方法:對於每個頂點,設立Num、Low、Used、Alive四個屬性,一個Stack儲存當前正在被遍曆的頂點;每訪問一個頂點,將它的Num和Low設立為目前時間戳,Used、Alive設為True,並將頂點入棧,對於它的每條邊,若
Time of Update: 2018-12-04
/*****************************\| 有向圖縮點| CALL:void reduce_point();| N,M分別為點數邊數| fa[]記錄縮點後每個點屬於哪個點\*****************************/int f_min(int x,int y){return x<y?x:y;}struct Edge{int u,v,next,w;};Edge edge[100000];int head[50000],en;void
Time of Update: 2018-12-04
二叉尋找樹是一種非常有用的資料結構。經過一定擴充,它可以支援的操作有:Insert(插入)、Find(尋找)、Remove(刪除)、GetMax(取最大)、GetMin(取最小)、Prev(取前驅)、Next(取後繼)、Rank(取某元素的序號)、Select(按照序號取該元素)。如果資料是隨機的話,以上操作可以保證在O(logn)的期望時間內完成。但是比賽中顯然出題者會給出一些刁鑽的資料讓最普通的二叉尋找樹嚴重TLE,這便是平衡二叉樹得以應用的時候了。平衡二叉樹可以保證以上操作是嚴格(AVL)
Time of Update: 2018-12-04
#define INF 2000000000#define typec int//type of costconst int pN=600000,eN=3000000;struct Edge{int u,v,next;typec w;};Edge edge[eN];int en,head[pN],cur[pN],ps[pN],dep[pN];void insert(int u,int v,typec
Time of Update: 2018-12-04
說到機率,有些好玩的東西不得不提。比如,你知道嗎,23個人中至少兩個人生日相同的機率竟然超過了1/2;假如你們班上有50個人的話,那更不得了,至少兩人生日相同的機率達到97%