2020 07 26日常總結 貪心與思維

2021-10-08 13:02:17 字數 2767 閱讀 1442

[problem]

\color}

[problem]

給你一迭薄煎餅,請你寫乙個程式來指出要如何安排才能使這些薄煎餅由上到下依薄煎餅的半徑由小到大排好。所有的薄煎餅半徑均不相同。

要把薄煎餅排好序需要對這些薄煎餅做翻面(flip)的動作。方法是以一抹刀插入一迭薄煎餅中,然後做翻面的動作(也就是說在抹刀上面的薄煎餅經翻面後,會依相反的次序排列)。若一迭共有 n

nn 個薄煎餅,我們定義最底下的薄煎餅的位置為 1

11,最上面的薄煎餅位置為 n

nn。當抹刀插入位置為 k

kk 時,代表從位置 k

kk 到位置 n

nn 的薄煎餅要做翻面的動作。

一開始時,這迭薄煎餅隨意堆放,並以半徑大小來表示。例如:以下 3

33 迭薄煎餅(最左邊那一迭 8

88 是最上面乙個薄煎餅的半徑)

8           7           2

4 6 5

6 4 8

7 8 4

5 5 6

2 2 7

對最左邊那迭薄煎餅,如果我們把抹刀插在位置 3

33(就是半徑為 7

77 的那塊薄煎餅的下面)的地方做翻面,就會得到中間那迭,如果我們再把抹刀插在位置 1

11(就是半徑為 2

22 的那塊薄煎餅的下面)的地方做翻面,就會得到最右邊那迭。

input

\texttt

input

每組測試資料一列,內容為這一迭薄煎餅一開始的狀態。每列開始的整數(介於 1

11 到 100

10010

0 之間)代表位於最上方薄煎餅的半徑,依此類推。薄煎餅的數目介於 1

11 到 30

3030

之間。output

\texttt

output

對每一組測試資料輸出 2

22 列。第一列為原來那迭薄煎餅。第 2

22 列則為要使這迭薄煎餅由小到大排列所做的翻面的動作。數字代表抹刀所插入的位置。(0

00 代表已完成)。如果已經排好了,則不能再有翻面的動作。

[solution]

\color}

[solution]

題目並沒有說要總步數最少,所以我們可以逐個擊破。

怎麼個逐個擊破呢?很簡單。假設我們現在把半徑最大的 t

tt 個餅按照順序排在了最底下(它們佔據了位置 1−t

1-t1−

t),那麼我們就找到未排好的餅中半徑最大的那乙個(記為 k

kk),先一次flip把 k

kk 放到最上面,再一次flip把 k

kk 放到第 t+1

t+1t+

1 號位置即可。

當然,這只是理論,一定要注意細節。

[code]

\color}

[code]

int a[35]

,n,b[35]

;int

main()

for(

int i=

1;i<=n;i++

)printf

("%d "

,a[i]);

printf

("\n");

//記得換行

memcpy

(b,a,

sizeof

(b))

;sort

(b+1

,b+n+1)

;//排序

register

bool sign=

true

;for

(int i=

1;i<=n;i++)if

(a[i]

!=b[i])if

(sign)

for(

int i=

1;i<=n/

2;i++

)swap

(a[i]

,a[n-i+1]

);for(

int i=

1;i<=n;i++

) a[i]

=lower_bound

(b+1

,b+n+

1,a[i]

)-b;

for(

int i=n;i>=

1;i--)if

(t!=n)

if(flag)

break

;//已經移好,退出

} flag=

true

;//一定要記得初始化flag

printf

("%d "

,n-i+1)

;//再移到下面

reverse

(a+n-i+

1,a+n+1)

;//同理

for(

int j=n;j>=

1;j--

)//是否移好

if(a[j]

!=n-j+1)

if(flag)

break

;//已經移好,退出

}printf

("0\n");

}return0;

}

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...

2019 10 01日常總結

前言 今天是祖國母親70歲生日,請允許我向祖國母親說一聲 生日快樂!願您永遠繁榮昌盛 山清水秀!題意 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n nn個房間,並且有n 1 n 1n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...