Time of Update: 2018-12-05
/*************************************************************題意:給你n只貓,m只狗,p個人;每個人都有一隻喜歡的和一隻討厭的動物;如果去掉某人討厭的並且留下他喜歡的,則這人是高興的,讓你求出最多高興人數。演算法:利用二分匹配求最大獨立集最大獨立集=節點數-最大匹配數建圖:喜歡貓的人左邊,喜歡狗的人右邊二分圖初始化為0;只要有衝突的,權值為1。*********************************************
Time of Update: 2018-12-05
Catch the ThevesTime Limit: 5000/2000 MS (Java/Others) Memory Limit: 65768/32768 K (Java/Others)Total Submission(s): 313 Accepted Submission(s): 105Problem DescriptionA group of thieves is approaching a museum in the country of zjsxzy,now they are
Time of Update: 2018-12-05
/*******************************************************演算法介紹:AC自動機(Aho_Corasick automation),為多模字串匹配演算法;常見的例子為給出n個單詞,再給出一段包含m個字元的文章,找出有多少個單詞在文章裡出現過;演算法步驟:(1)構造一棵Trie樹;根節點不包含字元,除根節點外每一個節點都只包含一個字元;從根節點到某一節點,路徑上經過的字元串連起來,為該節點對應的字串;每個節點的所有子節點包含的字元都不相同;(2
Time of Update: 2018-12-05
/*********************************************題目大意:有一個100*100的正方形湖,湖中間有一個直徑為15的圓形小島;有n個點隨機分布在這個正方形中;一個人要從小島上跳出湖外,可以跳躍在這些點上;人每一步能跳的最大距離為d;求能跳出湖外所需的最小的跳躍距離和步數;演算法分析:首先計算每個座標兩兩間的距離;然後找出所有能從小島上一步跳到的點存入數組s中;然後找出所有能一步跳出湖外的點存入數組t中;設定兩個虛擬頂點s和t;用s與數組s中的所有頂點相連
Time of Update: 2018-12-05
/*************************************************演算法引入:最小k度限制產生樹,就是指有特殊的某一點的度不能超過k時的最小產生樹;如果T是G的一個產生樹且dT(v0)=k,則稱T為G的k度限制產生樹;G中權值和最小的k度限制產生樹稱為G的最小k度產生樹;演算法思想:設特殊的那點為v0,先把v0刪除,求出剩下連通圖的所有最小產生樹;假如有m棵最小產生樹,那麼這些產生樹必定要跟v0點相連;也就是說這棵產生樹的v0點至少是m度的;若m>k,條件
Time of Update: 2018-12-05
/*******************************************************題目大意:給多串病毒和一個源碼;求每串病毒在源碼中出現的次數;演算法思想:AC自動機;給每串病毒一個編號;當匹配成功後用visit數組記錄該病毒出現的次數;********************************************************/#include<iostream>#include<cstdio>#include<c
Time of Update: 2018-12-05
/*************************************************題目大意:求字典序最小的和字典序最大的位置,若有多個則取最左邊的;並給出該串在這n個串中出現的次數,即同構串的個數;演算法分析:求字典序最小(大)的位置主要用到字串的最小(大)標記法;求同構串個數可以轉換為求該串最小迴圈節的總個數;涉及到KMP演算法中的next函數;**************************************************/#include<ios
Time of Update: 2018-12-05
/**************************************************最小(大)標記法:最小(大)標記法主要用於解決判斷"同構"一類問題;迴圈同構問題:給出兩個串:s1="babba"和s2="bbaba",其中兩者均看成環狀即首尾相接的;問:從s1的哪裡斷開可以得到和s2一樣的串或者兩者不會相同?本題就是從s1的第2個字元’a’後面斷開,可以得到與s2一樣的串;這個問題即為同構問題;同構問題的解決演算法:(1)樸素演算法(O(nm))即嘗試s1的n個斷開點,與s
Time of Update: 2018-12-05
/*************************************************題目大意:求第一個字串在第二個字串中出現的次數;即求主串能與子串進行多少次匹配;演算法思想:KMP演算法,在發生失配時,文本串不需要回溯;而是利用已經得到的"部分匹配"結果將模式串右移儘可能遠的距離,繼續進行比較;模式串不一定向右移動一個字元的位置;右移也不一定必須從模式串起點處重新試匹配;即模式串一次可以右移多個字元的位置,右移後可以從模式串起點後的某處開始試匹配;***************
Time of Update: 2018-12-05
/*一看到n和k的範圍和題目的類型就應該想到和DP有關了先按Bi由大到小排序(遞減快的早點選,這裡是貪心的思想)dp[i][j]表示前i個取了j個能達到的最大值那麼轉移方程就是dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+Ai-(j-1)*Bi);*/#include <vector>#include <map>#include <set>#include <deque>#include
Time of Update: 2018-12-05
polya計數原理參看:http://blog.csdn.net/wsniyufang/article/details/6671128乘法逆元:百度#include<iostream>#include <stdlib.h>#include <algorithm>#include <stdio.h>#include<vector>using namespace std;int prime[8084];int isprime[10001];
Time of Update: 2018-12-05
參考:http://blog.csdn.net/jxy859/article/details/6686305 1.f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1。 2.f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)。 3.f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1。 4.[f(0)]^2+[f(1)]^2+…+[f(n)]^2=f(n)·f(n+1)。
Time of Update: 2018-12-05
#include<iostream>#include<cstring>#include<queue>#include<cstdio>#include<algorithm>using namespace std;const int N = 10;const int MAX = 0xfffffff;int n,m;//n是點數,m是邊數int source, sink;//source為源點,sink為匯點/****************
Time of Update: 2018-12-05
/**********************************************************************已知四邊形的四條邊,求該四邊形能得到的最大面積。已知四條邊和兩個對角,四邊形面積公式為:S2=(p-a)*(p-b)*(p-c)*(p-d)-a*b*c*d* cos2A;其中p=(a+b+c+d)/2,A=兩個對角和之半。從公式可知當A為90°時面積最大。這時的四邊形是圓內接四邊形。************************************
Time of Update: 2018-12-05
/**************************************************************題意:給出一個圖的每個點的度的序列,求能否構成一個簡單圖;演算法:Havel定理:給定一個非負整數序列{dn};若存在一個無向圖使得圖中各點的度與此序列一一對應;則稱此序列可圖化。若圖為簡單圖,則稱此序列可簡單圖化;可圖化的判定:d1+d2+……dn=0(mod 2)。關於具體圖的構造,我們可以簡單地把奇數度的點配對,剩下的全部搞成自環;可簡單圖化的判定(Havel定理)
Time of Update: 2018-12-05
/*******************************************************題意:求一個圓錐的最小體積,要求這個圓錐必須覆蓋所有給出的點;因為是立體的,處理起來比較麻煩,所以就抽象到一個區間來考慮;圓錐的體積V=1/3*(Pi*r*r)*h;所以影響體積的就是:h*r*r;求了半天求不出來,所以就只能考慮搜尋了;這裡二分和三分都是可以的,注意要排序下;還要用到直角三角形相似;因為這樣可以把h和r關聯起來,二分搜尋直接搜尋h就可以了;**************
Time of Update: 2018-12-05
/******************************************************************題意:多邊形有n個頂點,輸入m條直線,分別輸出它們在多邊形內的長度,邊界也算演算法:求出直線與多邊形的所有交點,排序後,判斷每一段線段是否在多邊形內(判斷中點是否在多邊形內),求和。*******************************************************************/#include<iostream>
Time of Update: 2018-12-05
/*****************************************************題意:有n個任務,已知完成每個任務的最少時間和最多時間;如果完成某個任務時總的花費超過了它的最多時間,則要罰款,數額為超過的時間t;問你在最短完成所有任務的時候,每個任務的t最大為多少(開始題目一直沒看懂);演算法:幾乎是裸的貪心,先把任務按最多時間從小到大排序;因為開始總的花費相對比較少,自然要把最大時間花費的往前移;如果最大花費時間相同,則按最小時間從到小排序;然後注意下資料範圍就OK
Time of Update: 2018-12-05
/**********************************************************題意:給出n個矩形,從裡面抽掉一個,求剩下的所有矩形的面積交;演算法:由於資料量不超過100000,所以不需要用線段樹最佳化,只需要O(n)預先處理就行了;即從左往右處理[1,i]之間的矩形的面積交;再從右往左也處理一次[i,n]的面積交;然後枚舉中間抽掉的矩形;最後求一次左右兩邊的面積交就OK了;*****************************************
Time of Update: 2018-12-05
/********************************************************題目大意:John一天要參加很多婚禮,要想儘可能參加完所有的婚禮;由於要婚禮的正中間要舉行特殊儀式必須參加;所以參加一個婚禮的時間必須超過一半;所以每個婚禮正中間的時間不能重合;演算法思想:貪心演算法,主要就是排序的問題;即按照每個婚禮正中間的時間進行排序;然後貪心的分配時間就好。****************************************************