給出奇數個數,每次把它中間的數取出來放到最左邊或最右邊,求出最少取多少次可以讓這些數是從小到大的。
bfs+hash判重。每次左邊右邊操作一次,判斷之前有沒有出現過了,沒有就入隊。
#include
#define maxn 300017
using namespace std;
int n,state[1000001][11],head,tail,hs[maxn],father[1000001],ans;
int locate(int
x)bool hash(int
x) else
return0;}
void left()//左邊
void right()//右邊
int check(int
x)void ans(int
x)//回溯求答案
}void bfs()
//如果已經從小到大了就退出
tail++;
right();
if (!hash(tail)) tail--;
else father[tail]=head;
if (check(tail))
}while (headint main()
#include
#define maxn 1000003
using
namespace
std;
int n,state[1000001][11],head,tail,bs[1000001],mid,a[1000001];
long
long hs[maxn];
bool ok;
long
long locate(int a)
bool hash(int a)
void left()
void right()
bool check()
void bfs()
if (check())
for (int i=1;i<=n;i++) a[i]=state[head][i];
right();//往右
if (hash(a))
if (check())
}while (head!=tail);
}int main()
JZOJ 7 9C組第三題 排列的編碼
給出乙個長度為n序列,求出它在n的全排列中是第幾個。這道題要找規律,設ml i ml i 為第i i 位後面有幾個數比第 i role presentation style position relative i i位小,通過一系列操作 詳見某蒟佬 可以得到答案an s an s ml i n i ...
JZOJ 7 15C組第三題 漢諾塔
簡單的漢諾塔問題,改了一下規則 不能把盤子從1號柱上直接移到3號柱上,也不能把盤子直接從3號柱上移到1號柱上。現在給出盤子的數量,判斷它第m個狀態時每個盤子都在哪個柱上 初始狀態算0 這題正解比較神奇。但是我們可以用另一種方法,根據打表,我們能發現,當n為3時,狀態從0到27分別為 1 1 1 2 ...
普及 模擬 開關燈泡(jzoj第三題)
題目 description 乙個房間裡有n盞燈泡,一開始都是熄著的,有1到n個時刻,每個時刻i,我們會將i的倍數的燈泡改變狀態 即原本開著的現將它熄滅,原本熄滅的現將它點亮 問最後有多少盞燈泡是亮著的。input 乙個數n output m,表示最後有m盞是亮著的 sample input sam...