1. 程式人生 > >CCF 2018-09 題解

CCF 2018-09 題解

1.就是求平均值,第一個和最後一個特判一下。

2.這題兩種思路:第一種,直接n*n的判斷有沒有交叉的區間,有就直接加上去。第二種直接模擬時間軸,時間軸最大隻有1e6,那個區間如果有覆蓋就直接+1,然後兩個人的區間覆蓋,如果兩個人都有這個區間就是2,陣列為2的個數加起來就行了。由於區間長度是S-T,其實這個相當於[s,t),有一個是開區間。

3.請見  政大佬

4.記憶化DFS,開一個vis[400][400][400]的陣列,vis[pos][i][j],pos表示位置,i,表示當前位置的值,j,表示前一個位置的值。然後就暴力列舉所有的值,如果那個值和前面一個的值已經訪問過了就直接返回0。從小往大搜索,這樣就可以保證字典序最小。

這題可以用第一題對拍一下哈哈

主要考點:

1.平均值,知道a[pos],b[pos-1],b[pos]可以推出b[pos+1]只有3種取值(滿足(b[pos-1]+b[pos]+b[pos+1])/3==a[pos])

2 記憶化搜尋,因為每種狀態後面都有3種取值所以暴力是,3^100複雜度,明顯超時。所以要剪枝,就是前面說的vis陣列。這樣所有狀態最多跑一次,總複雜度300^3,(實際上沒有這麼大)可以過。

5.你能開這一題,可以直接跳過我部落格了。