SWUSTOJ #254 翻煎餅

題目

麥兜最喜歡的食物是煎餅,每次在街上看到煎餅攤的時候都會在那裏停留幾分鐘。最吸引麥兜還是煎餅師傅那一手熟練的翻煎餅的技術,一堆煎餅在那裏,師傅只需要用鏟子翻幾下,就讓煎餅整齊的疊在了一起。 這天,爲了慶祝麥兜被保送上研究生,他從煎餅師傅那裏買回來一些煎餅請客。但是麥兜買回的煎餅大小不一,麥兜太想喫煎餅了,他想喫這些煎餅中最大的那個。麥兜還知道同學們也很喜歡煎餅,爲了表示他的誠意,他想讓同學們先喫,麥兜最後喫,因此,麥兜想把煎餅按照從小到大的順序疊放在一起,大的在最下面。這樣麥兜就可以在最後拿到最大的那一塊煎餅了。 現在請你幫助麥兜用煎餅師傅翻煎餅的方法把麥兜買的煎餅從小到大的疊在一起。煎餅師傅的方法是用鏟子插入兩塊煎餅之間,然後將鏟子上的煎餅翻一轉,這樣鏟子上第一個煎餅就被翻到了頂上,而原來頂上的煎餅則被翻到了剛纔插入鏟子的地方。麥兜希望這樣翻煎餅的次數最少。

輸入

輸入包括兩行,第一行是一個整數n(1<=n<=1000),表示煎餅的個數,接下來的一行有n個不相同的整數,整數間用空格隔開,每個整數表示煎餅的大小(直徑),左邊表示頂部,右邊表示底部。

輸出

輸出爲一行,翻煎餅的最少次數

樣例輸入

5
5 4 2 3 1

樣例輸出

4

源代碼

#include <stdio.h>
#include <stdlib.h>

int main() {
	int num;
	int a[1005];
	scanf("%d", &num);
	int k = 0;
	for (int i = 0; i < num; i++)
		scanf("%d", &a[i]);
	for(; num > 1; num--) {
		int max = 0, l = 0;
		for (i = 0; i < num; i++) {
			if (a[i] > max) {
				max = a[i];
				l = i;
			}
		}
		if (l == 0) {
			k += 1;
			for (i = 0; i < num / 2; i++) {
				int t;
				t = a[i];
				a[i] = a[num - 1 - i];
				a[num - 1 - i] = t;
			}
		}
		else if (l < num - 1) {
			k += 2;
			for (i = 0; i < (l + 1) / 2; i++) {
				int t;
				t = a[i];
				a[i] = a[l - i];
				a[l - i] = t;
			}
			for (i = 0; i < num / 2; i++) {
				int t;
				t = a[i];
				a[i] = a[num - 1 - i];
				a[num - 1 - i] = t;
			}
		}
	}
	printf("%d\n", k);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章