命運偷走如果只留下結果, 時間偷走初衷只留下了苦衷。
你來過,然後你走後,只留下星空。
逃不掉的那一天還是來了,小 f 看著夜空發呆。
天上空蕩蕩的,沒有一顆星星——大概是因為天上吹不散的烏雲吧。
心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。
小 c 拿來了一長串星型小燈泡,假裝是星星,遞給小 f,想讓小 f 開心一點。不過,有 著強迫症的小 f 發現,這串一共 n 個燈泡的燈泡串上有 k 個燈泡沒有被點亮。小 f 決定 和小 c 一起把這個燈泡串全部點亮。
不過,也許是因為過於笨拙,小 f 只能將其中連續一段的燈泡狀態給翻轉——點亮暗燈 泡,熄滅亮燈泡。經過摸索,小 f 發現他一共能夠翻轉 m 種長度的燈泡段中燈泡的狀態。
小 c 和小 f 最終花了很長很長很長很長很長很長的時間把所有燈泡給全部點亮了。他 們想知道他們是不是蠢了,因此他們找到了你,讓你幫忙算算:在最優的情況下,至少需要 幾次操作才能把整個燈泡串給點亮?
輸入格式:
從標準輸入中讀入資料。
輸入第 1 行三個正整數 n,k,m。
輸入第 2 行 k 個正整數,第 i 個數表示第 i 個被沒點亮的燈泡的位置 ai。
輸入第 3 行 m 個正整數,第 i 個數表示第 i 種操作的長度 bi。
保證所有 bi互不相同;保證對於 1≤i
輸出格式:
輸出標準輸入中。
輸出一行乙個非負整數,表示最少操作次數。
輸入樣例#1:
5 2 21 5
3 4輸出樣例#1:
2【樣例 1 解釋】
【資料範圍與約定】
子任務會給出部分測試資料的特點。如果你在解決題目中遇到了困難,可以嘗試只解 決一部分測試資料。
每個測試點的資料規模及特點如下表
特殊性質:保證答案小於 4
(窩太菜了只會做noip題了qwq)
一開始毫無頭緒啊qwq
但是區間修改很多時候都可以通過把序列看成差分之後變成單點修改,這個題這麼做之後顯然只會更加簡單。
(0/1異或序列差分的時候直接xor前一位置的數就行了,只不過要倒著做,要不然就成求字首和了2333)
把序列末尾的長度延伸1,那麼每次操作就是選兩個位置(距離必須在給的可修改區間長度的集合裡),把它們都^=1。
於是我們就可以dp出任意距離的兩個1都消成0需要的最小次數(不存在方案則是inf)。
考慮到k最大只有8,所以差分之後1的數量最多只有16,狀壓dp即可。
#include#define ll long longusing namespace std;
const int maxn=40005;
int n,k,m,a[233],xor[maxn],d[maxn],cnt,pos[233];
int now,f[100005],ci[23],bt[100005];
inline void init()
inline void solve() }}
int main()
洛谷P3943 星空
洛谷p3943 星空 命運偷走如果只留下結果,時間偷走初衷只留下了苦衷。你來過,然後你走後,只留下星空。逃不掉的那一天還是來了,小 f 看著夜空發呆。天上空蕩蕩的,沒有一顆星星 大概是因為天上吹不散的烏雲吧。心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。小 c 拿來了一長串星型小燈泡...
洛谷 P3943 星空
有乙個長度為n的01序列,有k個1 每次可以將給定長度的子串取反,即0 1,1 0 求最少幾次可以將整個序列都變為0 差分 狀壓dp 首先將原序列異或差分 每消去一對1就是將1移到一起 先用bfs預處理出每兩個1移到一起的最小步數 然後用狀壓dp來求總的最小步數 include include co...
洛谷P3943 星空 題解
一道很好的鍛鍊思維難度的題,如果您能在考場上直接想出來的話,提高組450分以上就沒問題了吧。別像作者一樣看了好幾篇題解才勉強會 先提取出題目大意 給定乙個長度n 40000的01串,其中1的個數 8,有m種操作,每次操作都是把乙個該操作對應長度的區間取反,或者說異或上1,求使整個串變為只有0的串的最...