Time of Update: 2018-12-05
請看下面的轉換圖:其中紅線表示非法轉換,藍線表示合法轉換。這樣就可以構建4x4的矩陣了。接下來快速冪...ac。#include<iostream>#include<cstdio>#include<string.h>using namespace std;struct node{ int m[4][4]; }res,temp,mod;int n;node matriXmult( node a,node b ){ node c; memset( c.m,0,
Time of Update: 2018-12-05
這題的題意佷坑爹啊。。。雖說是很明顯的二分題。說有K個奶牛機編號1-K,有C頭奶牛,編號k+1-K+C這樣形成了K+C階的距離矩陣。每台奶牛機可以處理T只奶牛開始呢... 只把機器和奶牛連了邊,機器與奶牛的邊全部去掉了... 無限WA...後來想.. 如果流通過機器之間傳到奶牛呢= =!!!有剩餘流就可以做到了!頓悟,狂敲,交... 無限WA....後來看了看題,機器之間的流不算流啊... 只要牛進入機器產奶就行了= =,距離只是個過程啊.. 相當於轉移過程,這不是流啊...然後...
Time of Update: 2018-12-05
這題好玩!對這種圖形遞推題終於攻破了!哇哈哈哈!就是遞推找規律!好玩啊~#include<cstdio>int main(){ int N; __int64 f[1001]; f[0]=f[1]=1; f[2]=5; for( int i=3;i<=1000;i++ ) { f[i]=f[i-1]+f[i-2]*4; int len=1; for( int j=i-3;j>=0;j--,len++ ) if( len&1 )
Time of Update: 2018-12-05
發現只要有思路還是比較好切題的。相信大家不出意外,對於下面這個矩陣還是好構造的。第0排代表第0號格子的機器人,可以到達個格子,可見2號格子是不可達的。這個矩陣的N次冪,就是機器人走多少步形成的局面。上面矩陣的2次冪:可以得到上面的矩陣,這是什麼意思呢?第0排的3表示0號格子的機器人通過2步有3種方法到0號格子。哪三種?0-0-0,0-1-0,0-3-0。就這三種。同樣每個格子的數也代表了不同的意義。那麼題中所求的最終回到每個格子一個機器人的狀態。也就是在這個矩陣中不同行不同列放置4個機器人的總數
Time of Update: 2018-12-05
【題目大意】有一條一維的山脊,山脊上有FJ的牛,每頭牛都有自己的領地[Si,Ei]。如果有[Si,Ei]包含於[Sj,Ej]且不完全相等。則說J牛比I牛強壯。現在FJ想知道對於每頭牛,有多少頭牛比他強壯。【解題思路】利用樹狀數組解區間問題。解法一:按e的降序排列,e相等時,s小的在前。這樣通過查詢s可以知道區間的情況。解法二:按s的升序排列,s相等時,按照e的降序排列。【代碼】解法一:#include<iostream>#include<string.h>#include
Time of Update: 2018-12-05
容斥刷不動啊!!今天十分的邪惡加猥瑣的註冊了一個小號和大一的孩子們一起做題;也沒有要和他們比賽的意思,只是我對演算法有很多不熟悉的,所以呢....哎
Time of Update: 2018-12-05
很神奇的4720msAC....看來double 不是一般的慢啊!!哎呀呀~#include<iostream>#include<string.h>#include<cstdio>#include<cmath>#define eps 1e-5using namespace std;struct node{double m[222][222];}res,temp,mod;int n,m,t;node matriXmult( node a,node
Time of Update: 2018-12-05
老戴找...這題還是很有意思的.. 哈哈~也想了我蠻久的... 但是這題的無向邊感覺有點不對勁啊!這也能AC??我都不相信啊!!網路流的邊還是不能輕易覆蓋的!#include<iostream>#include<string>#include<cstdio>#include<algorithm>#define MN 222#define INF 1111111using namespace std;struct EDGE{ int
Time of Update: 2018-12-05
本來這幾天打算做2-SAT的,昨天和zzy看了演算法之後,其中說到需要解強連通分量,於是便開始學習了。雖然以前也學習過強連通分量的演算法,那時只知道一個就是Kasaraju演算法,當時對於其兩次DFS先正搜再反搜的順序不以為然,我堅定地先反搜再正搜,結果果斷的WA了!zzy那時秒A過的....
Time of Update: 2018-12-05
題目大意:從字典中選擇N個單詞,然後確定開始單詞S,結束單詞T。A,B兩個人輪流選擇單詞,在K次內,先手A從開始單詞S出發回到結束單詞T的次數。用單詞作為狀態轉換,用map映射。當a單詞的最後一個字母與b單詞的最前一個字母相同時,則a狀態可以轉化至b狀態matrix[a][b]=1;接下來要處理的就是K次內這個問題了。我們可以很簡單的得到如下的M+M^3+M^5+M^7+M^9.....因為先手嘛...
Time of Update: 2018-12-05
網路流好題:這道題目的大意是這樣的:有 M 個豬圈(M ≤ 1000),每個豬圈裡初始時有若干頭豬。一開始所有豬圈都是關閉的。依次來了 N 個顧客(N ≤ 100),每個顧客分別會開啟指定的幾個豬圈,從中買若干頭豬。每個顧客分別都有他能夠買的數量的上限。每個顧客走後,他開啟的那些豬圈中的豬,都可以被任意地調換到其它開著的豬圈裡,然後所有豬圈重新關上。問總共最多能賣出多少頭豬。由於這題的思路我沒有想出來,而是學習了這篇部落格,大家可以看一下。網上思路都差不多,這篇寫得很好。這題構圖還是弄了我很久.
Time of Update: 2018-12-05
很有趣的題哈~很久以前看了matrix67大牛的相關博文,對這個題有點印象,但卻不知道怎麼做。昨晚睡前構思了一下,還到老胡電腦上試敲,當然得出來的答案怪怪的。一直記得是從0->0的方案,可是輸出矩陣得出的卻是15->15的方案....下面說一下思路吧:我們假定給出的4*N的瓷磚為第N-2排放滿有如下15種情況。0代表沒有瓷磚,1代表有瓷磚第N排 0000 0000 0000 0000 ....... 0000 第N-1排 0000
Time of Update: 2018-12-05
看了三天的網路流,總算是切掉一道題了... 還是要安靜下來耐心的,自信的切題啊~~嘿嘿~#include<iostream>#include<cstdio>#include<string>using namespace std;struct edge{int f,c;}g[222][222];struct node{int l,p,a;}list[222];int N,M,ans,s,t;void init(){ int u,v,c; memset( g,
Time of Update: 2018-12-05
題目大意:有N個人,手上有Ai個標記,該人可以向指定的K個人委任標記(自已標幟不會少)。當該人手上有奇數個標記的時候,擁有投票權。問,最後有多少人手中的票為奇數個。思路。以輸入範例一為例:初始狀態矩陣:A=|210|狀態轉移矩陣為: |111|B=|001| |100|於是乎第一輪結束後的狀態:(A*B+A)第二輪結束後的狀態為: (A*B+A)*B+(A*B+A)=> A*(B+E)*B+A*(B+E)=>A*(B+E)^2;同樣第三輪結束後:A*(B+
Time of Update: 2018-12-05
用的FF演算法,裸實現516ms++,記得當年的二分圖16ms啊....這裡發兩個模板吧,網路流才初學.. 弱爆了....#include<iostream>#include<cstdio>#include<cmath>#define MN 422using namespace std;struct edge{int f,c;}g[MN][MN];struct node{int l,p,a;}list[MN];int s,t,ans,M,N;void
Time of Update: 2018-12-05
很快就發現了這題的遞推特性。簡直是赤裸裸啊~定義一個數組( [串長度][串中'1'的個數]=種類數 )這就是一個排列啊~用一個簡單的遞推方程求解出來C(n,i)=C(n-1,i)+C(n-1,i-1);然後從首位n開始判斷,∑C[n-1][i] ( i∈[0,l] )若和大於等於當前的第k個數則說明,右邊的n-1位足夠提供題中所需的數量,因此當前位為'0';若右邊n-1位不能提供所需的數量,則當前位為'1',右邊必須向n借一位,這樣k-=cnt;把右邊的和減去。提供的l--;蠻有意思的一題:
Time of Update: 2018-12-05
赤裸裸的網路最大流...建圖還是沒有什麼技巧的... 繼續水...#include<iostream>#include<string>#include<cstdio>#define MN 444using namespace std;int s,t,ans,w[8],Sum;int map[MN][MN],vis[MN],a[MN],pre[MN],que[MN];void setG(){ Sum=0;s=0;ans=0; int n,d,l,i,j,a,
Time of Update: 2018-12-05
這些天刷了蠻多的矩陣題,感覺對思維的訓練還是很大的,一向不喜歡做題的我這幾天被驚奇郭虐菜了...果斷跟進做題!題目大意:有一排數列用0,1構成,若當前數的左邊為1,則當前數改變狀態這樣轉一圈。為一次。那我們就可以這麼構造矩陣了。先看這個矩陣:|010||001|=B|100|用A=[101]去乘,可見第一列的1與A最後的1有關係,也就是左邊為1狀態改變的意思。再多多看看就是了。然後由於變化與不變化,與自身有關係只要B+E就可以了。然後矩陣N次冪..... soso.....Time:62ms
Time of Update: 2018-12-05
昨晚躺在床上想這題怎麼構圖呢....開始的時候想的是源點到牛的流量為2(限制牛隻能吃1喝1)。再而牛與吃喝直接連邊,容量為1.吃喝拆開成兩個兩兩直接連邊,容量為1,保證每個吃喝只有一次。再末端吃喝連邊到匯點。這種想當然的思路我竟然開始敲了代碼!!真是... 上面的構圖有明顯的錯誤,因為牛可以吃2個或者喝2個,這是我的圖不能控制的。轉而想... 將每頭牛拆成3隻,一頭容量限制容量為2,一頭管吃一頭管喝... so... 這樣雖然可以限制只吃喝一次,但是呢...
Time of Update: 2018-12-05
so.... 輸入考驗功底啊... 還好,沒難倒我~哇哈哈哈~#include<iostream>#include<string>#include<cstdio>#define MN 111using namespace std;int n,f,e,d,ans,s,t;int map[MN][MN],que[MN],a[MN],vis[MN],pre[MN];void setG(){ int i,u,v,c; ans=0;s=n+1;t=n+2;