是m個圍成一圈的感測器。每個感測器都有開和關兩種工作狀態,分別用1和0表示。顯然,從不同的位置出發沿順時針方向連續檢查k個感測器可以得到m個長度為k的01串。vani知道這m個01串應該是互不相同的。m會取到可能的最大值。現在vani已經了解到了k的值,他希望你求出m的值,並給出字典序最小的感測器排布方案。
很顯然,第一問的答案就是 2^n。
爆搜直接0ms 236kb過
第二問,構造乙個有 2^(n-1)個節點的圖,對應 2^(n-1)個 n-1 位二進位制數。從代表數 k 的節
點(0<=k<2^(n-1))向代表數(k<<1)&(1<<(n-1))的節點,和代表數((k<<1)+1)&(1<<(n-1))的節點
分別連一條邊。可以發現這樣的圖中,所有點的入度和出度都是 2,因此這是乙個尤拉圖。
因此我們從 0 號點開始 dfs 尋找乙個尤拉迴路,回溯的時候記錄到棧中,最後倒序輸出即可。
因為要求字典序最小,dfs 的時候要注意搜尋順序,先走 0 邊,再走 1 邊。這個演算法尋找歐
拉迴路,每個點、每條邊只訪問一次,是 o(v+e)級別的。
時間複雜度 o(2^n),預計得分 100 分。
#include
#include
#include
#include
#define gc getchar()
using
namespace
std;
const
int n=1
<<12;
const
int inf=~0u>>1;
int n,k,t,ans[n],p[n];
void read(int &f)
while(isdigit(c))
f*=d;return;
}void write(int x)
bool dfs(int x,int now,int q)
int main()
3033太鼓達人
鼓的主要元件是m個圍成一圈的感測器。每個感測器都有開和關兩種工作狀態,分別用1和0表示。顯然,從不同的位置出發沿順時針方向連續檢查k個感測器可以得到m個長度為k的01串。vani知道這m個01串應該是互不相同的。而且鼓的設計很精密,m會取到可能的最大值。現在vani已經了解到了k的值,他希望你求出m...
NOIP2013模擬 太鼓達人
我們可以先將所有的01串按字典序從小到大做出來。我們很容易發現 打表找規律 將全0串放最前面明顯是最優的。所以,我自然而然地想到了貪心。我們先設f i 將01串按上述做好。設m i 為第i次檢查出的01串是f陣列中的第m i 個,dg判斷是否能放入,可以就往下dg。如果方案成立直接輸出。當dg查詢到...
我的太鼓達人2
iphone版的太鼓達人其實還是很不錯的,nds上我也比較習慣用觸控螢幕,而iphone的解析度和電容觸控很適合玩太鼓達人。但是不能玩自製曲目還是有些遺憾。pc上有個 度很高的太鼓次郎,而且們的自製譜面也很多,所以就想先做乙個比較簡單的能應用太鼓次郎譜面的程式在iphone上,資源的話可以直接用ip...