題目:
小a有乙個1-2^n的排列a[1..2^n],他希望將a陣列從小到大排序,小a可以執行的操作有n種,每種操作最多可以執行一次,對於所有的i(1<=i<=n),第i中操作為將序列從左到右劃分為2^段,每段恰好包括2^個數,然後整體交換其中兩段.小a想知道可以將陣列a從小到大排序的不同的操作序列有多少個,小a認為兩個操作序列不同,當且僅當操作個數不同,或者至少乙個操作不同(種類不同或者操作位置不同).
下面是乙個操作事例:
n=3,a[1..8]=[3,6,1,2,7,8,5,4].
第一次操作,執行第3種操作,交換a[1..4]和a[5..8],交換後的a[1..8]為[7,8,5,4,3,6,1,2].
第二次操作,執行第1種操作,交換a[3]和a[5],交換後的a[1..8]為[7,8,3,4,5,6,1,2].
第三次操作,執行第2中操作,交換a[1..2]和a[7..8],交換後的a[1..8]為[1,2,3,4,5,6,7,8].
分析:首先由這樣的乙個性質,乙個合法序列的操作的任意排列都合法,因為對於任意兩個動作先執行哪乙個產生的結果都一樣(大範圍的交換,對小範圍內的點得相對位置沒有影響)
再多說一句,這個內部是很重要的,與長為8的陣列, 劃分成4 ,4 ,其他層面的改變都是對4,4 內部的改變與4 ,4 的先對位置無關,所以具有無序性。
那麼只需確定從大到小或從小到大列舉操作即可。
對於每次的處理,可以看成這樣例如 8
7 8 5 6 1 2 4 3 那麼對於第一種交換需要解決的問題是吧所有的段變成12 34 56 78 這樣四個段,他們的順序無所謂,因為只有該操作可以做到這一點。這樣先統計有多少小段
內的兩個數不是 遞增且相差1的關係。那麼多與2個顯然沒有解,進行可行性列舉,就直接過了此題。
//#pragma comment(linker, "/stack:1024000000,1024000000")
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(a) a.begin(), a.end()
#define clr(a, x) memset(a, x, sizeof a)
#define x first
#define y second
#define pb push_back
#define lowbit(x) (x&(-x))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define rep1(i,x,y) for(int i=x;i<=y;i++)
#define rep(i,n) for(int i=0;i<(int)n;i++)
using namespace std;
const double eps = 1e-10;
typedef long long ll;
typedef long long ll;
typedef pairpii;
const int oo =0x3f3f3f3f;
const int n = (1<<12)+10;
int id[n] , n , aa[n] , now[n] , ans , ji[30];
void dfs(int d,vectora , int all)
int cnt = 0, po[3];
for(int i=1 , j=1;ite;
if(!cnt)
深搜 模板題 迷宮問題
迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入 第一...
BZOJ 3252 攻略 思路題
傳送門 比較好想的一道思路題,結果有個地方沒開 long long wa 了三次。其實就是模仿一下樹鏈剖分,重新定義重兒子,乙個點的重兒子為所有兒子中到葉節點權值最大的點,然後就和樹鏈剖分一樣 dfs 一遍,把那些鏈的頂端的 sum 值放到乙個陣列排個序。include include includ...
基礎演算法題 地宮取寶(深搜 剪枝)
地宮取寶 問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以...