Codeforces Round #108 (Div. 2)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #108 (Div. 2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Codeforces Round #108 (Div. 2)
C. Pocket Book
題意
- 給定\(N(N \le 100)\)個字符串,每個字符串長為\(M(M \le 100)\)。
- 每次選擇\(i, j, k\),然后交換串\(i\)和串\(j\)的長度為\(k\)的前綴。
- 操作可以做任意次,求最多能得到多少不同的字符串,\(modulo (10^9+7)\)。
思路
- 相當于每個位置的可選字符為該列的不同字符的數(shù)量。
代碼
- C. Pocket Book
D. Frames
題意
- 給定一個\(n \times m(3 \le n,m \le 1000)\)的矩陣,由'.'和'#'構(gòu)成。
- 兩個矩形框放入該矩陣,'#'表示格子被矩形框覆蓋,且邊長均不小于3。
- 兩個矩形框的關(guān)系是任意的,重邊、重疊,甚至完全重疊也是可以的。
- 判斷原矩陣是否能由兩個矩形框表示,若可以輸出"YES"以及兩個矩形框的左上角坐標和右下角坐標,否則輸出"NO"。
思路
- 找出橫向長度大于2的行號,顯然只有最小值,次小值,最大值,次大值有可能成為矩形框的橫坐標。
- 暴力枚舉判定即可。
代碼
- D. Frames
E. Garden
題意
- 一個\(n \times m(1 \le n,m \le 100,n \cdot m \le 200)\)的網(wǎng)格,有\(k(k \le 7)\)的格子必須要覆蓋,且任意兩個格子之間要存在一條路徑(相鄰格子有一條公共邊)。
- 覆蓋格子\((i,j)\)的代價為\(a(i,j)\)。
- 求最小代價,并輸出一種方案,'X'表示覆蓋,'.'表示未覆蓋。
思路
- 用\(f[u][mask]\)表示格子覆蓋狀態(tài)\(mask\)且集中到\(u\)的最小代價。
- 轉(zhuǎn)移:\[f[u][mask]=min{f[u][submask] + f[u][mask \oplus submask] - v[u]}\]
\(v[u]\)表示點\(u\)的覆蓋代價,即\(a[i = u / m][j = u \% m]\)
當狀態(tài)\(mask\)集中到\(u\)之后,可以走到或者說擴展到其他點\(v\),這個bfs一下即可。
代碼
- E. Garden
轉(zhuǎn)載于:https://www.cnblogs.com/mcginn/p/5901490.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #108 (Div. 2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django-web聊天
- 下一篇: express开发实例