FOJ 2014 3 有獎月賽

2021-06-21 04:59:04 字數 2093 閱讀 2892

由於跑a

區去面試的原因,這次比賽沒參加,回來時已經四點多了,過了

h題,然後

d題交了一發,沒考慮乙個盟國只有乙個國家的情況,

wa了一次,之後就結束比賽了…具體說下每道題吧。

a. 檔案系統

簡單模擬題。 把題目意思理清楚就比較簡單了。每個組給乙個編號,並記錄它的成員,然後對每個檔案進行判斷就可以了。(徐偉拿了一血!!)

b. a ****** geometric problems

題目意思是給n個點,求最多能選多少個點組成凸多邊形。這題一開始沒想到思路,後來在博兄的指點下才明白了……明白之後就覺得比較簡單了,果斷好久沒寫計算幾何了,反應比較遲鈍了。

首先對n個點組成的n*(n-1)條線段進行極角排序,從小到大。因為我們逆時針來看,後一條線段的極角一定要大於前一條的。 然後列舉第i個點為起點時,遍歷排序好後的線段陣列,不斷更新其他點的狀態,即到這點之前最多有多少個點。 時間複雜度 o(n^3)

c. yesorno

首先得反應出來其實兩個等價的串,如果將它們看成乙個環的話,它們是相等的。怎麼看出這點來呢,可以在紙上畫一畫找規律。其實如果我們將乙個串的首尾連起來看,x操作其實只是將首尾位置變換到了x操作的點的位置,還是原來那個環,絲毫沒變。明白了這點後就好辦了。

先將兩個a串連線起來,只要b串是其子串即可。這裡採用kmp判斷。貌似題目資料弱了,直接暴力o(n^2) 判斷也是可以0ms ac的。

d. 盟國

題目涉及兩個操作,乙個是兩個國家結盟,另乙個是某個國家退盟,很容易反應出是並查集。但是直接搞的話,退盟操作就有些麻煩了。

可以考慮給每個國家乙個編號,退盟之後的國家再給乙個新的編號,即放到末尾去,那它之前那個編號就不用管了,因為它已經沒有任何影響了,這樣我們就對那些編號進行並查集就可以了。需要注意的乙個地方就是:有可能乙個盟國只有乙個國家,這個時候退盟不會增加盟國數量,注意這點這題就沒問題了。

e. climb stairs

簡單dp; dp[i]表示爬i層樓有dp[i]種方式;

dp[i] = dp[i-a] + dp[i-b];  dp[0] = 1;

所以答案就是 dp[a]*dp[b-a]*[n-b] (af. programcaicai's trees

樹形dp ,比較簡單

dp[i][0] 表示第i個點才用0方式時以它為根的子樹的最小的代價

dp[i][1] 表示第i個點才用1方式時以它為根的子樹的最小的代價

dp[i][0] = c[i][0] + σ min(dp[j][0]+ c00 , dp[j][1]+ c01)

dp[i][1] = c[i][1] + σ min(dp[j][0]+ c10 , dp[j][1]+ c11)

其中j 為i的子節點

答案就是 min(dp[1][0],dp[1][1]);

g. 數字密碼

這題比較蛋疼,一開始大意理解錯了,以為是連續字串,直接就想到ac自動機dp了,**都敲完了,發現錯了,sad……

這裡是子串行,要注意。 乙個直接的想法就是乙個n維dp,匹配到每個串的第多少位時所需的最少的位數,然後轉移自然即使列舉下一位取哪個字串的下一位了。 不過n維dp直接搞在c++裡面應該不好弄。我想的辦法是將這個狀態hash成乙個整數,因為最多7個串,所以可以將它採用7進製方式來hash,

然後就可以直接dp了。 實現的時候還是要小心點,能優化的地方有優化一下,不然會超時。

h. wuyou

直接dfs就好了,引數記錄這一位是否是第一位,以及a 是否已經小於b 了;

當a 已經小於 b 了,那麼碰到問號,就直接取 9 就行了

如果還沒:

如果這一位不是問號,並且在這一位上已經大於b了,那麼直接返回

不然這一位就直接是a 在這一位的值了

如果是問號: 那麼想取與b相等的,然後考慮比b小1的情況

細節認真想想就ok了 !

第一次寫題解,寫得比較爛,如果大家要**可以qq問我要,有更好的解法可以qq跟我交流。

Foj 1205 小鼠迷宮問題

問題描述 小鼠a與小鼠b身處乙個m n的迷宮中,如圖所示。每乙個方格表示迷宮中的乙個房間。這m n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿上,下,左,右4個方向進入未封閉的房間。小鼠a位於迷宮的 p,q 方格中,它必須找出一條通向小鼠b所在的 r,s 方格的路。請幫助小鼠...

FOJ 1475 不同的單詞

這道題讓我一次性ac了,但儘管如此,也讓我學到了一點,那就是如何將calloc函式的返回值強制轉換成指向一維陣列的方法!嘻嘻 是好心的教會我的 include include include int n,i,j,flag char p 21 str 21 int main while scanf d...

FOJ 1402 豬的安家

這道題目的基本思想就是必須求前n 1個數的最大公約數。比如這邊為了方便大家理解,給出一組測試資料。33 1 5 17 2 10 1 這組資料的最終結果是121 下面我們就來分析一下。定義乙個函式gongbeishu 求前n 1項的最小公倍數。首先,我們定義變數 gbs 表示前n 1個數的最小公倍數。...