151013的測試總結

151013的測試總結

  • T1
  • T2
  • T3
  • 最後的總結

T1

Dp && Gcd

【題目及題號】農夫過河 superoj923
【第一次】87.5 wa掉一個點
【題解】
本題有一個性質:在lcm(a[1]+b[1],a[2]+b[2],……,a[n]+b[n])的時間內必定出解,如果沒有找到解就爲IMPOSSIBLE。
發現1~10的lcm最大爲2050然後就可以開開心心寫暴力dp了。
f[i][j]表示到第i個樁子,時間爲j是否可行。
f[i][j]可以由f[i-1~5][j-1]和f[i+1~5][j-1]轉移而來。
【考試ING】
每次dp都有可能擴大解的範圍,所以dp可以多跑幾遍QAQ我只跑了一遍Orz。
其實我是怕T。
QJC說可以從左邊跑到右邊,再從右邊跑到左邊,再從左邊跑到右邊(雙向轉移就一定不會錯)。

“沒證明過,也許可以保證無後效性。誰知道呢。Orz”

【錯因】
只跑了一遍dp。下次算清楚時間複雜度,然後別怕T。我們不慫。

T2

DP && 狀態壓縮 && Floyd(最短路)&& BFS

【題目及題號】掘金 superoj924
【第一次】暴力10分(題目沒給詳細的數據範圍,我猜是uva的題)
【題解】
本題考的知識點比較雜:dp+狀態壓縮+floyd+bfs。
定義‘G’‘E’‘X’代表的爲點,‘-’代表路徑。
先用bfs搜出m步以內,點之間直接到達的距離(不經過其他點);
然後用floyd算出所有點之間的最短路【可以經過其他點】;
最後對於第一問判斷有多少個點可以由起點到達。
對於第二問就分別DP(記憶化搜索)
f[i][j]表示當前停在第i個’G’狀態爲j;j表示哪些‘G’已經到過了;
最後找一找f[i][j]中j轉二進制有多少個1,數量和第一問相同的情況下再更新第二問的最小值。
具體來說就是ansb = min(ansb,f[i][j]+dis[i][ed]);ed是‘X’所在點。
【考試ING】
上來其實沒怎麼想這道題,直接寫的暴力,然而這道題的暴力寫的我都快哭了。
歸納一下:
此題提供了一個思路:如果搜索無法保證最基本的剪枝就把它轉成區間最優值,然後再來限定條件搜。
具體來說就是這道題的暴力寫深搜根本無法確定到當前步數最短一定最優或者走過的不能再走;
走過可以再走的話那麼就按這種方式把它轉成區間最優來搜狀壓。
【錯因】
自己下來寫完之後發現數組開小了,交上去報錯爲WA,不是RE。手玩兒大數據看出來的錯啊,一把淚。

下次注意:即使每次都記得把數組開大一些,交卷之前除了文件名還是要重新看一遍數據範圍,算一算數組大小。
本題其實是用電腦自帶計算器算的時候按錯了,可能是鼠標點1沒點上,然後沒注意到屏幕直接按了ENTER看結果。
╮(╯▽╰)╭唉!

T3

KMP(略有改動)

【題目及題號】 動物園 superoj848
【第一次】50%A 50%T
【題解】
這道題用kmp做,線性的做法大概如下:
利用kmp的性質,可得知如果當前字母的next指字母i,設前i個字母的長度爲len。
那麼以當前字母爲結尾且長度爲len的字符串和以i爲結尾的前綴是完全相同的。
那麼記錄當前點最少跳多少次到空,就是最少的包含次數。
然後本題要求不重合,那麼只匹配一半即可。
具體見代碼【複習的時候記得去bzoj看】。

void work()
{
    next[0] = -1;
    for(int i=1;i<len;i++){
        ll now = next[i-1];
        for(;s[now+1]!=s[i] && now!=-1;now=next[now]);
        next[i] = ((s[now+1]==s[i]) ? now+1 : -1);
        if(next[i]!=-1) num[i]=num[next[i]]+1;
    }
    int ed,j=-1,m=0,ck=0;
    ans = 1;
    for(ed=0;ed<len;ed++){
        if(ed&1) ss[m]=s[m],m++;
        for(;j!=-1 && ss[j+1]!=s[ed];j=next[j]);
        if(ss[j+1]==s[ed]) j++;
        if(j!=-1) ck = 1;
        else ck = 0;
        ans = (ans*(ll)(1ll*num[j]+1ll+ck))%mod;
    }
    cout<<ans<<endl;
}

【考試ING】
先寫了個O(n^3)的暴力,然後想了想又寫了個O(n^2)的暴力,看看時間還有二十分鐘,啊不想了反正寫不完了。
開開心心去對拍Orz。

本題給我的教訓:題目當中提到的算法雖然不一定要考,但是如果詳細解釋了的話,它說不定就是標算的一部分。
出題人的心思你別猜Orz。

表格

成績記錄

題目 期望分數 實際得分
River 100 87.5
Gold 30 10
Zoo 50 50

最後的總結

這次仍然不是第一Orz,傻逼的我不應該在最後一秒改代碼。如果不改就a第一題。如果160開開心心踩第一,結果手殘。事實上還是因爲自己考慮不太周全,只能繼續加油啦↖(^ω^)↗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章