hdu 1430 魔板 康拓展開 對映優化

2022-07-18 08:30:22 字數 947 閱讀 8782

給定三種操作,將排列a轉化為排列b,求最少步驟。

這種題目可以只跑一次bfs,比如只跑"12345678",那麼如果遇到"23456781"->某個字串呢?因為每乙個數字都是等價的,我們可以把2對映為1,3對映成2,以此類推。這樣就可以用"12345678"跑出來的操作序列了。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

class

cantor

; ll w[siz];

bool

vis[siz];

cantor()

void

init()

ll makecanto(

string

s)

}rec+=w[siz-i-1]*d;

}return

rec;

}string

recover(ll val)}}

return

s; }

} fix;

struct

ax friend

bool

operator

<(ax a,ax b)

};ll n,m;

bool vis[50000

];bool

f;struct

node

};map

ans;

void bfs(int

fr)}

intmain()

cout

}}

143 約瑟夫問題

143 有乙個陣列a 1000 存放0 1000 要求每隔二個數刪掉乙個數,到末尾時迴圈至開頭繼續進行,求最後乙個被刪掉的數的原始下標位置。以7個數為例 0 1 2 刪除 3 4 5 刪除 6 7 0 刪除 如此迴圈直到最後乙個數被刪除。方法1陣列 define null 1000 int main...

1 4 3 實現繼承

實現類的繼承,首先宣告乙個基類 public class shape 在宣告乙個子類 public class size 實現繼承 public class size shape 新建兩個介面 public inte ce ichangshape public inte ce ichangesize...

143 陣列的度

給定乙個非空且只包含非負數的整數陣列 nums,陣列的度的定義是指數組裡任一元素出現頻數的最大值。你的任務是找到與 nums 擁有相同大小的度的最短連續子陣列,返回其長度。示例 1 輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面擁有相...