給定三種操作,將排列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.連續子陣列裡面擁有相...