UVA 1611 Crane(起重機)(貪心)

2022-05-08 14:12:12 字數 1593 閱讀 9693

題意:輸入乙個1~n(1<=n<=10000)的排列,用不超過9^6次操作把它變成公升序。每次操作都可以選乙個長度為偶數的連續區間,交換前一半和後一半。

分析:從左到右依次將數字i放在位置i。

設要將數字i放在位置i,而數字i現在在位置pos。

(1)若(pos - i) * 2 + i - 1 <= n,則可以直接將i放在位置i。pos-i為連續區間的一半長度,i-1為i之前已經排好的數字個數。交換連續區間(i, i + (pos - i) * 2 - 1)

如:1 3 4 2 5,將2放在位置2,現在1已經排好,只需交換連續區間(2,5),即將前一半3 4和後一半2 5交換,就可直接完成i放在位置i的操作。

(2)若不滿足(1),則暫時將在pos位置的數字i向前交換,直至滿足條件(1)。

操作為:若pos-i為奇數,則交換連續區間(i,pos);若pos-i為奇數,則交換連續區間(i+1,pos)。

#pragma comment(linker, "/stack:102400000, 102400000")

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define min(a, b) ((a < b) ? a : b)

#define max(a, b) ((a < b) ? b : a)

typedef long long ll;

typedef unsigned long long ull;

const int int_inf = 0x3f3f3f3f;

const int int_m_inf = 0x7f7f7f7f;

const ll ll_inf = 0x3f3f3f3f3f3f3f3f;

const ll ll_m_inf = 0x7f7f7f7f7f7f7f7f;

const int dr = ;

const int dc = ;

const int mod = 1e9 + 7;

const double pi = acos(-1.0);

const double eps = 1e-8;

const int maxn = 1e4 + 10;

const int maxt = 10000 + 10;

using namespace std;

int a[maxn];

vector> ans;

void exchange(int l, int r)

}int main()

for(int i = 1; i <= n; ++i)

}if(pos == i) continue;

if((pos - i) * 2 + i - 1 <= n)

else

else

--i;}}

int len = ans.size();

printf("%d\n", len);

for(int i = 0; i < len; ++i)

}return 0;

}

UVA 1611 Crane 推理 貪心

解題思路 這句提示是關鍵,2n次操作,表明每個數最多只需要兩次操作。應該從左到右依次操作過去,先將前面的數安定好了,就可以不用管前面的數了 假設操作到第i個位置,而i這個數剛好在pos這個位置上,現在就要判斷一下能否直接將pos上的i經過操作調到i這個位置上 如果 i pos i 2 1 n 就表示...

OpenGL 畫起重機

2 程式框圖 3 使用操作 4 執行環境 本次作業要實現乙個基於opengl 的起重機模擬軟體,通過分析,需要將乙個大的任務分為小 的部分來實現。所以應該將起重機分為幾個模組完成,最後將這些模組組裝到一起即可。可首先從大體上劃分為三個部分 車頭 head 車身 body 起重臂 arms 車頭又可以...

門式起重機的各種分類

門式起重機是橋式起重機的一種變形。在港口,主要用於室外的貨場 料場貨 散貨的裝卸作業。金屬結構像門形框架,承載主梁下安裝兩條支腳,可以直接在地面的軌道上行走,主梁兩端可以具有外伸懸臂梁。靖起雙主梁門式式起重機 門式起重機具有場地利用率高 作業範圍大 適應面廣 通用性強等特點,在港口貨場得到廣泛使用。...