洛谷 P2724 聯絡 Contact

2022-09-20 23:00:28 字數 1302 閱讀 5705

給你乙個字串(會有換行),求出在長度a~b的01字串出現最多的n種(出現次數一樣多的算一種),輸出它的次數以及分別是哪些字串,出現次數為第一關鍵字,字串的長度為第二關鍵字,字串的大小(也就是二進位制化為整數的大小)為第三關鍵字。

第一眼看時覺得挺水,感覺只有普及+左右的難度,就是普通的暴力列舉,但是用dfs會超時,所以要用一些技巧,也就是位運算的技巧,把二進位制強壓成十進位制數,就不用一位一位的比較了,再用結構體sort排序,在輸出就行。

1.列舉的時間複雜度是關鍵,如果你不信,可以用暴力列舉嘗試(第五個點和第七個點會讓你懷疑人生);

2.輸入時的換行;

3.輸出是的每六個一行以及末尾不能有空格(六個一行時要注意:當接下來沒有答案時,不能換行(本人卡這多時));

#includeusing

namespace

std;

inta,b,n;

char s[200010

];int ans=0;//

記錄出現過的二進位制數的個數(因為要排除未出現的)

intn;

struct

t pinlu[

20010];//

len是二進位制數的長度,value是二進位製化十進位制的結果,cnt是出現次數

bool

cmp(t x,t y)

return x.cnt >y.cnt;

}void print(int l, int

v)int

main()

int ans=0

;

for(int m=a;m<=b;++m)

;int sum=0

;

for(int i=1;i<=m;++i)

sum*=2,sum+=s[i]-'

0';//

二進位制十進位制

for(int i=m;i<=n;++i)

for(int i=0;i<(1

if(cnt[i]) pinlu[++ans].len=m,pinlu[ans].cnt=cnt[i],pinlu[ans].value=i;

}sort(pinlu+1,pinlu+ans+1,cmp);//

排序 int ss=0;//

ss記錄種類數

int now=0;//

now記錄當前輪到的二進位制數

while(ssans)

else

break;//

如果沒有找到就跳出

} }

cout

}

洛谷P5049 洛谷P5022 題解 旅行

原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...

洛谷練習P2279 P1346

2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...

洛谷 P1396 營救

題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...