2014 08 14 Orz教主第六次模擬賽 總結

2021-06-23 05:34:33 字數 3981 閱讀 8825

今天迎來了orz教主的最後一次模擬賽。

總分400 ,230 , floz同學220分rank2,但是他是隱藏的rank1(t1他只有20,實際得分應該是300)。

話不多說,上題,上總結。【本次的題目在tyvj均有原題】

t1 : 教主的花園 

可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標(均為整數,有可能為負),若兩個網格(x1, y1),(x2, y2)有|x1 – x2| + |y1 – y2| = 1,則說這兩個網格是相鄰的,否則不是相鄰的。

教主在y = 0處整條直線上的網格設定了一道屏障,即所有座標為(x, 0)的網格。當然,他還要解決他自己與內部人員的進出問題,這樣教主設定了n個入口a1, a2, …, an可供進出,即對於y = 0上的所有網格,只有 (a1, 0),(a2, 0), ……, (an, 0) 可以通過,之外的所有縱座標為0的網格均不能通過,而對於(x, y)有y不為0的網格可以認為是隨意通過的。

現在教主想知道,給定m個點對(x1, y1),(x2, y2),並且這些點均不在屏障上,詢問從乙個點走到另乙個點最短距離是多少,每次只能從乙個格仔走到相鄰的格仔。

資料範圍:

對於20%的資料,有n,m≤10,ai,xi,yi絕對值不超過100;

對於40%的資料,有n,m≤100,ai,xi,yi絕對值不超過1000;

對於60%的資料,有n,m≤1000,ai,xi,yi絕對值不超過100000;

對於100%的資料,有n,m≤100000,ai,xi,yi絕對值不超過100000000。

仔細讀題 ,題目大意就是:在x軸上設立n個出入口(ai,0),穿過x軸時必須從這些點穿過,不能走x軸上其他的點。給定m個點對(x1, y1),(x2, y2),求兩點之間的距離,每次只能向上下左右四個方向走乙個單位。

對於每個點對,有兩種可能:

一、不用穿過x軸【直接相減】

二、要穿過x軸 【

找到最近的出入口,使得兩個點到出入口的距離和最小】

要找最近的出入口,只需要最多o(n),用二分可以在(log n)解決。總時間o(m log n)。

t2 教主泡嫦娥

題目:(太長,我就總結一下)

題目大意:給出乙個高度序列h[i],要從中任選乙個點作為起點走一圈【沒錯走一圈,h[n]下乙個就是h[1]】。

教主可以選擇從任意乙個落腳點開始,順時針或者逆時針走,每次走到乙個相鄰的落腳點,並且最後回到這個落腳點。

教主在任意時刻,都會有「上公升」、「下降」兩種狀態的其中一種。

當教主從第i個落腳點(h[i]),走到第j個落腳點(h[j])的時候(i和j相鄰)

j的海拔高於i的海拔:如果教主處於上公升狀態,教主需要耗費兩段高度差的絕對值的體力;否則耗費高度差平方的體力。

j的海拔低於i的海拔:如果教主處於下降狀態,教主需要耗費兩段高度差的絕對值的體力;否則耗費高度差平方的體力。

當然,教主可以在到達乙個落腳點的時候,選擇切換自己的狀態(上公升→下降,下降→上公升),每次切換需要耗費m點的體力。在起點的時候,教主可以自行選擇狀態並且不算切換狀態,也就是說剛開始教主可以選擇任意狀態並且不耗費體力。 求:

走一圈的最小體力花費

資料範圍:

對於10%的資料,n ≤ 10;

對於30%的資料,n ≤ 100,a[i] ≤ 1000;

對於50%的資料,n ≤ 1000,a[i] ≤ 100000;

對於100%的資料,n ≤ 10000,a[i] ≤ 1000000,m ≤ 1000000000;

對於50%的資料,是比較容易想到的。設f[i,0/1]為走了i步時,狀態為上公升/下降的最小體力花費,列舉起點,o(n^2)。

博主一開始也是這麼想的,但是想讓它再快一點,就再加了一維表示變化次數。其實完全沒有用,反而導致自己只有30分。

對於100分,有水法也有n log n法

水法:哈哈只要從高度最低或者高度最高的走一遍就可以了【不知道為什麼能過】

水法2:當狀態轉移到快超時的時候直接輸出當前答案【卡時!】【資料較水導致答案出現在前方】

水法3:隨機起點【隨機次數稍微多一點,在保證不超時不重複列舉的情況下,還是有可能過得】

n log n法:f[i,j] 表示 i 到 i+2^j 的最小代價,f[i , j] + f[i + 2^j , j] = f[i , j + 1] 對於雜項我們可以用倍增的思想解決,總複雜度o(n log n)

t3:保鏢排隊

題目大意:給出一棵樹,以及相同父親的兒子節點的順序。現要求給所有節點排出乙個序列,要求:1、父親出現在兒子的前面;2、兒子節點的相對順序不能變

如       1                             1的兒子是2 3 4 ,順序為2 3 4

2      3     4                       2的兒子是5 6 ,順序為5 6

5  6

1 2 3 4 5 6 / 1 2 3 5 6 4 / ……為合法序列  

1 2 4 3 5 6 / 1 2 3 4 6 5 / 1 5 6 2 3 4 /……為不合法序列

求 合法序列方案數。

這是個較明顯的樹形dp,根據左兒子右兄弟多叉轉二叉之後,規定排名先的兄弟在上面【深度較淺】,這樣一來,對於節點x,他必須出現在他的兒子節點和兄弟節點之前,也就是l[x] 和 r[x

]之前。

對於節點x,左兒子和右兒子的方案是互相沒有影響的。f[x] = f[u] * f[v] (u為左兒子,v為右兒子,f為方案數)

設左兒子共有n個點,右兒子共有m個點,合併之後是乙個n*m的序列,有c(n , n + m)種方案。

所以 f[x] = f[u] * f[v] * c(sum[u] , sum[u] + sum[v]);

f[1]即為答案。

t4 教主的別墅

題目: 教主一共僱傭了n個lhxee,這些lhxee有男有女。

教主的大別墅一共有m個房間,現在所有的lhxee在教主面前排成了一排。教主要把n個lhxee分成恰好m個部分,每個部分在佇列中都是連續的一段,然後分別去打掃m個房間。

教主身為全世界知識最淵博的人,他當然知道男女搭配幹活不累的道理,以及狼多羊少,羊多狼少的危害之大。所以教主希望乙個分配方式,使得所有小組男女個數差的最大值最小。

教主還希望你輸出從左到右,每個組的人數。

如果有多種人數組合都能達到最優值,教主希望你分別告訴他這些方案中字典序最小和最大的方案。換句話說,你需要找到兩種方案,這兩種方案滿足所有組男女個數差最大值最小的前提下,第一種方案(字典序最小)要越靠前的組人數越少,也就是讓第乙個小組人盡量少,並且在第乙個小組人盡量少的前提下,讓第二個小組的人盡量少,依此類推;第二種方案(字典序最大)則要讓越靠前的組人數越多。

資料範圍: 

對於40%的資料,有n ≤ 100;

對於50%的資料,有n ≤ 1000;

對於65%的資料,有n ≤ 100000;

對於100%的資料,有n ≤ 5000000,m ≤ n且m ≤ 100000。

如果不要求找出方案,只要求求出最優值,這一題就相對簡單一些。

設男為1 , 女為-1 , 計算字首和。

ans = s[n] / m (向上取整)。 即 ans = (s[n] - 1)/ m + 1;【s[n] 取絕對值】

對於總和為s[n]的序列,一定可以分成m段,使得每一段的差值都不超過ans。

暴力列舉每一段的長度,假設當前要分成k段,這種長度能成為一種方案的前提是 這一段的差值不超過ans;剩下的數分成k - 1段的差值最大值也不超過ans     

即 abs(s[end] - s[start - 1]) <= ans , (abs(s[n] - s[end]) - 1) / (k - 1) + 1<= ans;

這樣就可以求出乙個方案,字典序最小就從1開始掃能分就分,最大就從n開始掃能分就分。注意s[n] = 0需要特判。

今天的題目難度還是不算大的,比賽時我想出了一三題,在打第一題的時候花了將近1h,主要就是二分不熟悉。

感覺今天的水平發揮出來了,沒有什麼遺憾,只能說水平還不夠,還需要繼續加強。

多打,多練,指不定比賽的時候題目都見過。哈哈。

第六次模擬測試 1

題目描述 東東正在玩字串遊戲,他有乙個魔法,能對字串進行操作,他能把字串的第 i ii 個字串變成 i ii 個。比如,若字串為 abc 東東施展魔法把字串變成了 abbccc 但是,改完之後,快遞員給東東打 了,東東拿完快遞回來發現自己忘記了原來的字串,現在只有你能幫東東 輸入格式 第一行輸出乙個...

第六次模擬測試 5

題目描述 石頭剪子布,是一種猜拳遊戲。起源於中國,然後傳到日本 朝鮮等地,隨著亞歐 的不斷發展它傳到了歐洲,到了近現代逐漸風靡世界。蒜頭君和花椰妹喜歡玩石頭剪子布,他們倆玩了n局遊戲,他們把每局情況記在了紙上,但由於n很大很大,所以他們不知道誰贏的次數的更多,現在求助於你,請你程式設計計算最終誰獲勝...

第六次模擬測試 6

題目描述 石頭剪刀布是常見的猜拳遊戲。石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一樣,則不分勝負。一天,小a和小b正好在玩石頭剪刀布。已知他們的出拳都是有週期性規律的,比如 石頭 布 石頭 剪刀 石頭 布 石頭 剪刀 就是以 石頭 布 石頭 剪刀 為週期不斷迴圈的。請問,小a和小b比了n輪之後,...