Crane 思維 貪心

2021-07-27 05:23:19 字數 915 閱讀 1410

今天上午比賽我出來的第五題,也是最後乙個題。

題目的意思說給你乙個序列,讓你交換到1,2,3,4,5......這種序列,我一開始沒看懂題目中說的bug是怎麼回事,賽後同學說了才懂,因為是special judge 的題,所以有乙個交換限制。

放上大牛的思路吧,和我一樣,我不知道怎麼寫了。。。尷尬

解題思路:這句提示是關鍵,2n次操作,表明每個數最多只需要兩次操作。 

應該從左到右依次操作過去,先將前面的數安定好了,就可以不用管前面的數了 

假設操作到第i個位置,而i這個數剛好在pos這個位置上,現在就要判斷一下能否直接將pos上的i經過操作調到i這個位置上 

如果 i + (pos - i) * 2 - 1 <= n 就表示可以一次操作完成 //(大神這裡沒有註明,但和我的式子是一樣的,仔細想一下這個式子求得是什麼,最右端點的值)

在上面條件不成立的情況下,又分為兩種情況 

一種是pos和i的距離是奇數的情況:那麼就直接將[i,pos]這個區間的值進行交換即可 

另一種是距離為偶數的情況,那就把[i+1,pos]這個區間的值進行交換即可

**:#include #include #include #include using namespace std;

int a[200000];

vector>vec;

void swap(int ll,int rr)

int main()

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

if(kk==i)

continue;

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

else

else

i--;}}

int len=vec.size();

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

for(int i=0;i

UVA 1611 Crane 推理 貪心

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

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

題意 輸入乙個1 n 1 n 10000 的排列,用不超過9 6次操作把它變成公升序。每次操作都可以選乙個長度為偶數的連續區間,交換前一半和後一半。分析 從左到右依次將數字i放在位置i。設要將數字i放在位置i,而數字i現在在位置pos。1 若 pos i 2 i 1 n,則可以直接將i放在位置i。p...

A Karen and Game 思維 貪心

思路 首先如果是個正方形,那麼如果答案能算完,那麼就是唯一的個數。不然的話是個矩形,如果答案能算完,那麼先算行和列長的一邊,同樣是一行 一列消1,長的一邊消的更多 include include include include include include include include incl...