Time of Update: 2018-12-05
文章不錯,大家可以看看。搞了半天原來SG函數這麼簡單,類比為Nim真是碉炸啦!不太會寫,將原理拿過來直接敲了。#include<iostream>#include<algorithm>using namespace std;bool cmp( int a,int b ){ return a<b;}int mex( int rec[],int cnt ){ sort( rec,rec+cnt,cmp ); if( rec[0] ) return 0; for(
Time of Update: 2018-12-05
很悲劇的讀錯題了。本來以為和Popular Cow一樣,對於所有的點
Time of Update: 2018-12-05
在今年培訓前期做的題目,那時感覺不會做,邀請了蘿蔔兄弟幫忙解決,現在看來確實是道水題。屁顛屁顛的AC了。這題直接記錄整個連續區間的值,把前面連續的去掉,留下最後一段不連續的,就可以用O(1)的演算法了。這種思想以前也遇到過,做的題多了就有感覺吧。不錯不錯。不過還是調了很久1Y;#include<iostream>#include<stdio.h>#define MAXN 150000#define MAXM 32000using namespace std;int
Time of Update: 2018-12-05
這個題很有意思,其實就是求出最短路徑,再用最短路徑值*結點值的和。通過這題,又找到了編程的一個bug,總是想省空間,結果就只能悲劇了,還是先相乘後強制轉化的問題,必須出錯的!第一次用比__int64還大的資料類型usigned long long,另外熟悉了一下宏,感覺還不錯。對最短路徑又有了新的想法,理解演算法很有好處啊!!#include<iostream>#include<queue>#define MAXN 50005#define ULL unsigned
Time of Update: 2018-12-05
hev神讓我做做這題... 大概我們可以用一個二維的單調隊列來寫的。用兩個矩陣來記錄大矩陣的部分最值。例如用A[i][j]來記錄mat[i][j]---mat[i+r-1][j]這一列的最小值,用Mi[i][j]來記錄A[i][j]--A[i][j+c-1]這一行的最小值,於是乎Mi[i][j]就是mat[i,i+r-1][j,j+c-1]這個r*c的子矩陣的最小值了。My Code相當挫大家都是530++ms AC的 我卻要970ms....
Time of Update: 2018-12-05
題目大意:火星人入侵地球,他們降落的地區為一個n*m的矩形兵工廠,在這個地區行頂點和列頂點處有雷射束,雷射束一次能消滅一排或一列的敵人。為了消滅所有入侵的火星人,求最小的花費。每安裝一個雷射束都有一個權值,花費所有雷射束權值的積。思路:如果不考慮到點權值,如POJ3041,每個點權值都為1,也就是求最大二分圖匹配了。用匈牙利或者網路流都很好做的。so... 但是這題求的是最優點權覆蓋,怎麼做呢....可以發現這題還是個二分圖.. 咱們把行定為[1,n]列點定為[n+1,n+m],這樣構造二分圖。
Time of Update: 2018-12-05
做這題還是看了Amber大神的論文...還是在這裡冗餘一下吧:點覆蓋集:無向圖G的一個點集,使得該圖中所以邊都至少有一個端點在該集合內。形式化的定時意思點覆蓋集為V'∈V,滿足對於所有的(u,v)∈E,都有u屬於V'或v屬於V'成立,即至少一個成立。形象的說是若干點“覆蓋”住了與他們鄰接的邊。這些邊恰好組成了原邊集。最小點覆蓋集:
Time of Update: 2018-12-05
最近每次做題都要看很多資料。看來是真的老了。這題給定字串,以及待編碼的字元數,採用哈夫曼編碼,編碼總長度最短。求此值。這題添加虛擬節點,使得最後的合并方便,也就是使得每次合并保證樹中都大於T個。T為提供的編碼字元數。相當於每一個節點要麼是空的要麼是有T個孩子的。設待編碼字元為N,添加的虛節點個數為β。那麼對(N+β)進行一次合并-> (N+β)-T+1 第二次合并 (N+β)-2*(T-1)......最後一次(N+β)-r*(T-1)=1也就是(N+β)%(T-1)==1%(T-1);
Time of Update: 2018-12-05
題目大意:有給定的N個人,主角編號13,求最小的報數序號M,使得主角為贏家。報數序列為1,M%N這樣.. 1是第一個出去的網上看的數學方法,各種感覺不爽!覺得演算法中最神奇的就是2分和遞迴了。美妙!數學分析過程網上都有,不解釋了。#include<iostream>using namespace std;int find( int n,int m ){ int s=0; for( int i=2;i<=n;i++ ) s=(s+m)%i; return s+1;}int
Time of Update: 2018-12-05
[AC 2011-9-17] 1062* 昂貴的聘禮 枚舉等級限制+dijkstra1087* A Plug for UNIX 2分匹配[AC 2011-9-20]1094 Sorting It All Out floyd 或 拓撲1112* Team Them Up! 2分圖染色+DP[AC 2011-9-20]1125 Stockbroker Grapevine FLOYD[AC 2011------]1135 Domino Effect 最短路1149* PIGS 網路流[AC 201
Time of Update: 2018-12-05
比賽中做出這題來讓我開心了好久啊~哈哈~溫習了一下樹狀數組。開始驚奇和雄爺爺和我說樹狀數組沒有這個性質,我不信。後來碼畜來之後,才發現,確實樹狀數組確實沒有這麼個性質。於是開始用vector做= =TLE.... 還好想出了二分這個好辦法... 1234ms AC了... 嘿嘿...其實我還是挺膜拜那些4500++的code...#include<iostream>#include<string>using namespace std;int N,K;int c[3999
Time of Update: 2018-12-05
最近寫的代碼都挺長的啊...下面說一下最小割吧。以下內容引自:這裡首先介紹一個概念:點連通度:一個具有N個頂點的圖G,去除K個頂點後,圖成為非連通圖,去除任意K-1個頂點後,圖仍為連通圖。責成圖G為K連通圖。獨立軌:A,B是圖G中兩個頂點,從A至B的無公用內頂點的路徑叫做獨立軌,其最大條數記為p(A,B);如中,將A=1,B=5;那麼該圖的最大獨立軌數量為31-2-3-5,1-4-5,1-7-6-5;三條。在這三條獨立軌中,每條切除一個內點,該圖的成為非連通圖。如果p(G)=N-1,則該圖為強連
Time of Update: 2018-12-05
題目其實這題水題本來不打算寫的,晚上看了下題解,發現和我那時TLE N久的代碼是一樣的。後來才發現我把最小值ans初始化:long long ans=(long long)1<<60;int index=0;這樣的最小值不夠大,導致後面的數乘起來比這個最小值還要大,導致了沒有更新index 而index又是0,在我的3個if中溜過去了... 傷不起啊...導致了死迴圈...
Time of Update: 2018-12-05
思路構圖還是十分的好想的...
Time of Update: 2018-12-05
題目大意:Stan與Ollie兩人博弈,Stan先手。兩人對當前數(初始為1)進行乘操作,乘數為[2,9];給定N,當某人第一次使得運算元大於等於N時,為勝利者。由博弈原理:設x為取到的值。則x>=N時為必敗態。任何能轉化為必敗態的都是必勝態,所以[ceil(N/9),N-1]為必勝點。只能轉化為必勝態的都是必敗態,所以[(ceil(N/9)/2),ceil(N/9)-1]為必敗點。當區間左端到達1時,就可以判斷了。#include<iostream>#include<c
Time of Update: 2018-12-05
上課前看了下題,上課時構了下思,下課敲了10min... 交了就A了... 好吧.. 這題弱爆了!題目大意:求一個數列中的逆序數....這題可以用座標離散化。然後... 從大的數向樹狀數組更新.. 查的時候求和,把這個數前面的大的數求出來就OK了。水爆了... 1Y#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct node{ int
Time of Update: 2018-12-05
從題意來看,是基本的SG函數應用,把剛學的set用進去最佳化,發現不行...TLE...再看看SG的原理,網上大部分都是採用遞迴,而那些題解報告都是一把抄,嗤之以鼻..下面是直接TLE的代碼:/*********************S-NimSevenster2012.08.26 12:55*********************/#include<iostream>#include<algorithm>#include<set>using
Time of Update: 2018-12-05
去年省賽原題..今年基本上把線段樹忘記的差不多了。今天又敲了一遍。發現自己的輸入處理還不錯。這種類型的弱爆了線段樹...由于思想不細緻,導致WA了很久,看來以後要細心一點了!weak nodeTime Limit : 2000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 22 Accepted Submission(s) : 7Font: Times New
Time of Update: 2018-12-05
題目意思很嚇人。經過分析之後就變成了一道比大小的題目... 囧~#include<set>#include<iostream>using namespace std;class Point3D{public: double x,y,z; Point3D( double a=0,double b=0,double c=0 ){ x=a; y=b; z=c; }}A[111],B[111];double dis( Point3D a,Point3D b )
Time of Update: 2018-12-05
這是一棵普通的二叉哈夫曼樹。#include<iostream>#include<queue>using namespace std;int main(){ int N; while( scanf("%d",&N)!=EOF ) { priority_queue< int,vector<int>,greater<int> > PQ; int len; __int64 ans=0; for( int i=0;