JZOJ 7 7C組第三題 頁

2021-08-21 06:58:49 字數 1206 閱讀 4326

給出奇數個數,每次把它中間的數取出來放到最左邊或最右邊,求出最少取多少次可以讓這些數是從小到大的。

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...