太鼓達人 尤拉迴路 DFS

2022-09-03 07:00:11 字數 1881 閱讀 6661

給出乙個01串,從不同的位置出發沿順時針方向找可以得到

m' role="presentation">m

m個長度為

k' role="presentation">k

k的01串。且這

m' role="presentation">m

m個01串是互不相同的。給出k的值,請你求出

m' role="presentation">m

m的值,並給出字典序最小的方案。 in

put' role="presentation">inp

utinput

3
ou

tput

' role="presentation">out

puto

utpu

t

00010111
n≤

11' role="presentation">n≤11

n≤11,打標了解一下233

但是打到n=

6' role="presentation">n=6

n=6,跑了乙個半小時都沒跑出來。。。(時間複雜度:o(

4n)' role="presentation">o(4

n)o(

4n))

正解是尤拉迴路。

但是我打的和其他大佬打的。。。

差距怎麼這麼大啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!

前面三頁都是1m

s' role="presentation">1ms

1ms的。。。

我跑的十分的慢的原因是我先跑了乙個o(

2n)' role="presentation">o(2

n)o(

2n)的全拍列,再o(

m2n)

' role="presentation">o(m

2n)o

(m2n

)求出十進位制的數字,最後o(

2n)' role="presentation">o(2

n)o(

2n)求出答案。但是他們直接o(

2n)' role="presentation">o(2

n)o(

2n),遍跑遍建邊就過了。。。

這道題求出01串的全排列後,將他們的十進位制打出來,再跑一遍,找出尤拉迴路,輸出答案就可以了。

#include 

#include

#include

using

namespace

std;

int n,m,a[3001][3001],num[3001][15],t[3001],mi[15],ans[3001],sum,o;

string head[3001],tail[3001];

bool ok,p[3001];

void dfs1(int x) //全排列

m++;

return;

}for (int i=0;i<=1;i++)

return;

}int conversion(int x) //轉化為十進位制

void dfs2(int x,int k) //求尤拉迴路

for (int i=0;iif (a[x][i]&&!p[i]) //可以通往這條邊

p[i]=false;

}}int main()

o=m-1;

dfs2(o,1);

for (int i=1;i<=m;i++) printf("%d",ans[i]);

return

0;}

bzoj 3033 太鼓達人 尤拉迴路

題意 長m的01環,每個長k的子串都是不同的01串。給出k,求最大的m以及字典序最小的方案。m 2 k 可以把k 1位01串看成點,k位01串就是邊,滿足尤拉迴路的條件。然後求字典序最小的尤拉迴路就行了,優先走字典序小的邊 include include include include includ...

3033太鼓達人

鼓的主要元件是m個圍成一圈的感測器。每個感測器都有開和關兩種工作狀態,分別用1和0表示。顯然,從不同的位置出發沿順時針方向連續檢查k個感測器可以得到m個長度為k的01串。vani知道這m個01串應該是互不相同的。而且鼓的設計很精密,m會取到可能的最大值。現在vani已經了解到了k的值,他希望你求出m...

DFS應用 尋找尤拉迴路

0.1 本文總結於 資料結構與演算法分析,源 均為原創,旨在 理解 dfs應用 尋找尤拉迴路 的idea 並用源 加以實現 源 我還沒有找到一種有效的資料結構和dfs進行結合,往後會po出 1.1 尤拉迴路定義 我們必須在圖中找出一條路徑,使得該路徑對圖的每條邊恰好訪問一次。如果我們要解決 附加的問...