2018計蒜客初賽2

2021-08-19 23:17:52 字數 1539 閱讀 7190

一天之後,計蒜客第二場,感覺一般般,第一題卡了一下處理的比較慢,導致後面時間略微不足,第二題倒是沒什麼坑點

思路:這題dp的味道還是挺明顯的,dp選擇當前元素所能達到的最大長度,至於轉移,第一次想的是轉移之前所有狀態中可能的狀態,然而o(n^2)的複雜度,加上多組資料,毫無疑問tle

之後想到用d,轉移可能的狀態,而不是轉移先前的狀態,用map儲存狀態,然而,map只是過載了下標運算子,內部紅黑樹實現o(log(n))的複雜度,結果還是被卡掉了

於是想到各種優化,優化cin,優化運算,優化函式等各種,然而依然杯水車薪

於是想到set預處理已經出現過的狀態,實現離散化,二分查詢離散化後的狀態來優化原來的暴力列舉,結果依然tle

最後猛然發現狀態的資料範圍僅有5次方,於是果斷回到第二種做法,還原map為陣列,順利ac,好吧,醉了

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int n = 200;

const int maxn = 2e5+10;

/*int p[maxn];

setp;

int dp[maxn];

map dp;

int myabs(int k)

return k;

}int main()

//}}

p.insert(pp);

if(dp[pp] > maxl)

}//cout << maxl << endl;

printf("%d\n",maxl);

}}*///mapdp;

int dp[maxn];

int main()

}//cout << maxl << endl;

printf("%d\n",maxl);

}}//o(n^2)

//o(2*n*d*log(n))

//優化

//o(n*(log(n)+d)*log(n))

//o(2*n*d)

思路:這題就是個字串大模擬,map訪問鍵值,字尾都採用substr截斷判斷,畢竟處於簡單位置,比較友好

#include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn = 1e5+10;

mapcol;

int main()

else if(temp=="delete")

else

}else if(temp=="query")

ch = ch.substr(nlen-len,len);

if(ch == cha)

}cout << re << "\n";}}

}return 0;

}

2018計蒜客初賽1

又到了一年一度的計蒜之道,第二次參加計蒜之道,但願今年能在去年的基礎上有個新突破 第一場,由於時間限制,只寫了乙個簽到題,就此拉開了本年度計蒜之道 思路 這題這題其實思路倒是蠻清晰的,就是不斷維護陣列最大值,關鍵就是邊界處理問題,考慮清楚還挺有簽到意味 include include include...

2017計蒜客初賽5

ucloud 剛剛建立乙個新機房,近日正在進行網路搭建。機房內有 n n 臺伺服器和 m m 個分線器,整個機房只有乙個網線出口。分線器的作用是將一根網線轉換成多根網線。蒜頭君也知道每個分線器輸出的最大網線根數 不一定要將分線器輸出的每根線都用上 問你至少需要使用多少個分線器才能使得每台伺服器都有網...

計蒜客初賽4練習題

因賬號衝突而遺憾錯過了這場。拿來練練手,稍微了解一下題目難度吧。比賽共兩題,其中第二題有三小問,按情況,一般做出第一題和第二題的第一小問,並加快手速就能晉級了,那就看看這兩部分吧 思路 矩形晶元的放置,一下就想到了之前做過的一道遞推,只需要將遞推從一維推廣到二維即可,用dp即可實現 對於被焊接了的位...