給出乙個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 尤拉迴路定義 我們必須在圖中找出一條路徑,使得該路徑對圖的每條邊恰好訪問一次。如果我們要解決 附加的問...