Time of Update: 2018-12-06
250...500...1000 比賽的時候沒思路。倒是想到一種trick,想cha人來著,後來發現房間裡沒有人提交。。。只想到了預先處理出從一個點到另一個點走m步所要用到的情況數,發現dp空間複雜度太高。今天看了一下別人怎麼預先處理的,我還是太嫩啊。。。dp[dx][dy][m]表示走m步座標移動了(dx, dy)所有的情況數。記憶化搜尋一下。const int MAXN = 55;const int MOD = 1e9+7;int dp[MAXN][MAXN][MAXN];int dir[
Time of Update: 2018-12-06
風水。。。是一門藝術。。。我在想要不要看看《周易》《葬經》什麼的,等老了還能出去給人算算命,看看陰宅陽宅什麼的,混口飯吃。嘿嘿,扯遠了。。。 題意:給一個凸多邊形,然後在裡面放兩個半徑為r的圓。問怎麼放能使覆蓋的面積最大(spj)。 思路:把多邊形的每一條邊向“內”移r的距離,交得一個新多邊形。在多邊形上找兩個盡量圓的點,放上圓心。關於怎麼向內移動r的距離,見所以 point[i] 和 point[i+1] x軸上移動的距離就是r*cos(th), y軸上移動距離就是r*sin(th);
Time of Update: 2018-12-06
先儲存一下代碼,回頭寫題解。 View Code #include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <cstring>#include <algorithm>#include <string>#include <set>#include
Time of Update: 2018-12-06
題意:N個點的一顆樹。問最少添加多少條邊可以讓每個點都在一個(且僅一個)環中。不得不佩服,這題dp設計出來的人。。。偶是弱菜,只能膜拜了。這位大牛的解說,很詳細:http://hi.baidu.com/19930705cxjff/blog/item/1df66e4a4ff3022e08f7ef5d.html
Time of Update: 2018-12-06
測試項目需求測試:查看杯子使用說明書介面測試:查看杯子外觀功能度:用水杯裝水看漏不漏;水能不能被喝到安全性:杯子有沒有毒或細菌可*性:杯子從不同高度落下的損壞程度可移植性:杯子再不同的地方、溫度等環境下是否都可以正常使用相容性:杯子是否能夠容納果汁、白水、酒精、汽油等易用性:杯子是否燙手、是否有防滑措施、是否方便飲用使用者文檔:使用手冊是否對杯子的用法、限制、使用條件等有詳細描述疲勞測試:將杯子盛上水(案例一)放24小時檢查泄漏時間和情況;盛上汽油(案例二)放24小時檢查泄漏時間和情況等壓力測試
Time of Update: 2018-12-06
250pt 和 500pt都是簡單題,500pt暴力就可以。。。1000pt:題意:給一棵樹,求這棵樹中不同子樹的個數。解:f[i]表示以i點為根節點所包含的子數的個數。f[i] *= (f[j] + 1) 其中i -> j有邊相連,+1表示不選以j為根的這棵子樹;dfs;int mp[60][60];bool vis[60];LL ans;class CentaurCompanyDiv2 {public: LL dfs(int u) { int i;
Time of Update: 2018-12-06
周冬的《兩極相通——淺析最大最小定理在資訊學競賽中的應用》把方法講的很詳細了。幾點:1、把平面圖G*中每一個面抽象成對偶圖G*中的點。2、平面圖包含f個面,設邊e分割fi, fj,則連邊(fi, fj)。3、關於如何區分源點和匯點。可以先串連s和t,得到一個附加面。如s->4->7->t->s,s*放到附加面中,t*放到無邊界的面中,加以區分。4、建好圖後要把(s*, t*)這條邊刪掉。5、G的面數等於G*的點數,G*的點數等於G的面數6、G與G*邊數相同
Time of Update: 2018-12-06
題意:求[l, r]區間內不重複的數的和。N個數,M次詢問解:離線處理M次詢問,看得別人的思路後才知道的。。。思維局限在預先處理N個數上了。。。對M次詢問按右區間的值從小到大排序。掃一遍N個數,如果發現當前這個數在之前出現過,就從之前出現這個數的位置上把這個數刪除,在新位置上插入這個數。這樣做的好處是刪除前面重複的不會影響後面的。時間複雜度控制在(N + M)logN的數量級上。ps:午不眠,困乎,我命休矣。 #include <iostream>#include
Time of Update: 2018-12-06
跟 HDU 4057 Rescue the Rabbit差不多的AC自動機+dp,比賽的時候被虐成傻逼了!!!999的狀態不多,直接狀態壓縮就行。dp[i][ACstatus][status] 到字串第i位置,在AC自動機上狀態為ACstatus,包含到999的狀態為status。更新了一下自動機的模板。。。Orz簡潔寫法 View Code #include <iostream>#include <cstdio>#include
Time of Update: 2018-12-06
小人從上往下掉的時候,比如區間[-50, 100], [0, 100]它可以從上一個100跳到下一個100.。。。。無語的神邏輯。。。從早晨wa到現在。T_T按高度從大到小排序f[i][0]表示到i層左端點的最小路徑,f[i][1]表示到i層右端點的最小路徑。落下時判斷第j層到第i層有沒有其他的層。。。這個寫了一個暴力,居然沒有TLE。。。看來題目資料真的不怎麼強。View Code #include <iostream>#include
Time of Update: 2018-12-06
題意:一個有向非循環圖,制定M個點,每個點有一個石子。A,B兩個玩家輪流移動這些石子(石子只能沿合法的邊移動),最後沒有石子可移的算輸。如果光看一個石子的話,這他妹的就是sg函數的定義啊。。。然後對整個圖處理一下每個點的sg值。對這M個點怎麼處理,這麼想吧。假設其中一個點為i,其sg值為sg[i] = a (a != 0)那可以發現,i可以走向[0,
Time of Update: 2018-12-06
對於這個解法,網上題解一大堆。不過覺得還是算導官方給的解答好些,簡潔又清楚。。。 大概總結一下(不是翻譯)=.= 首先是排序。然後確定狀態 f[i][j] (i >= j, i == j表示的只有n這個點) 表示 從i到1嚴格從右往左走然後再從1嚴格從左往右走到j 這樣兩條路徑的最小值,當然[1, max(i, j)]區間上所有的點都是被訪問過得。存在兩種狀態 :1: j < i - 1;dp[i][j] = dp[i-1][j] + Dis(i, i - 1);2: j ==
Time of Update: 2018-12-06
題面POJ 1170:有諸多商品,沒有商品有一個單價。可以組合的買特定個數的特定商品,這樣會得到優惠。給出這些優惠策略,給出每種商品的個數,問最少能花多少錢能把這些商品帶走? 解:輸入好蛋疼,先個商品類型數,然後給每個商品的編號c,個數k,和單價p。再給出s個優惠策略,每種策略前邊有一個num,表示需要多少類型的商品組合,然後是num對商品,每對給出商品的編號和數目,最後是固定類型固定數目的商品組合起來需要的花費。題目說的很清楚,最多5種商品,s最多為99,
Time of Update: 2018-12-06
From: http://hi.baidu.com/lydrainbowcat/item/f16e64103f8c5c088fbde44c POJ【數論/組合/博弈論】題目列表原來的列表比較水,今天換了一個難一些的列表,重新開始做~紅色的代表已經AC過,藍色的代表做了但是還沒過。這句話貌似在我空間裡的每份列表裡都有額。博弈論POJ 2234 Matches GamePOJ 2975 NimPOJ 2505 A multiplication gamePOJ 1067
Time of Update: 2018-12-06
不錯的題,做了兩次。兩次感覺不一樣,第一次那叫一個費勁啊。。。看了一天的解題報告,才大概理解怎麼回事,這次做完好好寫寫總結吧。開始想到的狀態有sum[i]表示以i為根的子樹走遍所有的位元組點的值,leaves[i]表示以i為跟的子樹的葉子節點數。顯然是錯誤的。。。好多狀態表示不出來。後來有考慮分回到i節點和不回到i節點這兩種狀態。但還是設計不出來,最不能確定的就是一個順序問題。無奈翻了一下以前看的資料。發現一個沒有想到的貪心方法。。。。 success[u]表示u為根的子樹上,成功找到房子的
Time of Update: 2018-12-06
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2412 實驗證明,被小錯誤搞死的感覺太不爽了!! 這題是去年省賽的題,今天重新做了一下。我了個去。被倆二b錯誤搞死了。!! 思路:先預先處理出某一秒如果切的話能得到的最大值。然後單調隊列最佳化一下就行。 View Code #include <iostream>#include
Time of Update: 2018-12-06
開始還以為是簡單博弈,後來發現是樓教主的男人八題裡面的,好吧。我想不到怎麼構造最優解。。。http://blog.csdn.net/niushuai666/article/details/6639977這裡講的很詳細,總結起來就是:當一堆時,必勝,兩堆相同時,必敗,三堆時,可以一次轉化成為兩堆,所以必勝。故:a1,a2,a3…………an為必敗點<=>當n為偶數時,對a1--an進行從小到大或從大到小排序,如果有a1=a2,a3=a4,…………an-1=an,必敗當n為奇數時以及其它的
Time of Update: 2018-12-06
歐拉定理(又稱費馬-歐拉定理):已知a和n為正整數,並且a和p互素,則a^phi(n) ≡ 1(mod n)。證明: 設集合Z = {X1, X2, X3, .... , Xphi(n)},其中Xi (i = 1, 2, .. phi(n))表示第i個不大於n與n互質的數。 考慮集合S = {a*X1(mod n), a*X2(mod n), ... ,a*Xphi(n) (mod n) },則集合Z = S; 1) 因為a和n互質,Xi和n也互質,所以a*Xi
Time of Update: 2018-12-06
那道題目看著好多狀態。。。leader, speed, energy, distance,還有結果minute。可以看到:1、某頭牛變成leader以後的energy是 總能量 - distance。 2、當leader > N || energy < 0這些情況都是非法的。3、distance == D這種情況是終止狀態。設 f[ld][sp][e][dis] 表示當前leader是ld,以速度sp到達能量剩餘為e,行走距離為dis的狀態所用的最少時間。
Time of Update: 2018-12-06
很明顯的Polya計數法,但是有一個糾結的地方就是這個k rotation不是給定的,而是然自己求出來的。因為資料比較大,暴力找的話肯定TLE,開始沒想到怎麼做。後來看到有人說用kmp,好吧,我又水 了。。。。。做法: 定義數組vv[],vv[] = v[] + v[], 就是把兩個v[]數組接起來作為匹配串,原串v[]作為模式串。O(n)跑一遍kmp,看在哪些位置正好匹配。然後polya計數就行。#include <iostream>#include <cstdio>